diff --git a/source/Components/Xceed.Wpf.AvalonDock.Themes.Metro/AssemblyVersionInfo.cs b/source/Components/Xceed.Wpf.AvalonDock.Themes.Metro/AssemblyVersionInfo.cs index 1eb36b5d..0a60abc1 100644 --- a/source/Components/Xceed.Wpf.AvalonDock.Themes.Metro/AssemblyVersionInfo.cs +++ b/source/Components/Xceed.Wpf.AvalonDock.Themes.Metro/AssemblyVersionInfo.cs @@ -21,7 +21,7 @@ This program is provided to you under the terms of the Microsoft Public internal static class _XceedVersionInfo { [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )] - public const string BaseVersion = "3.4"; + public const string BaseVersion = "3.5"; [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )] public const string Version = BaseVersion + ".0.0"; diff --git a/source/Components/Xceed.Wpf.AvalonDock.Themes.Metro/Theme.xaml b/source/Components/Xceed.Wpf.AvalonDock.Themes.Metro/Theme.xaml index f9f2a6c2..dd29b6a8 100644 --- a/source/Components/Xceed.Wpf.AvalonDock.Themes.Metro/Theme.xaml +++ b/source/Components/Xceed.Wpf.AvalonDock.Themes.Metro/Theme.xaml @@ -456,6 +456,8 @@ - - diff --git a/source/Components/Xceed.Wpf.AvalonDock/AssemblyVersionInfo.cs b/source/Components/Xceed.Wpf.AvalonDock/AssemblyVersionInfo.cs index 13f6f0c5..0a60abc1 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/AssemblyVersionInfo.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/AssemblyVersionInfo.cs @@ -21,10 +21,10 @@ This program is provided to you under the terms of the Microsoft Public internal static class _XceedVersionInfo { [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )] - public const string BaseVersion = "3.4"; + public const string BaseVersion = "3.5"; [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )] public const string Version = BaseVersion + -".0.11"; + ".0.0"; [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )] public const string PublicKeyToken = "ba83ff368b7563c6"; diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/AnchorablePaneTitle.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/AnchorablePaneTitle.cs index 11005c7f..1d3b212d 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/AnchorablePaneTitle.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/AnchorablePaneTitle.cs @@ -153,20 +153,23 @@ protected override void OnMouseLeave( System.Windows.Input.MouseEventArgs e ) var paneModel = pane.Model as LayoutAnchorablePane; var manager = paneModel.Root.Manager; - // Get psotion of this visual on screen - var pos = this.PointToScreen(new Point(0, 0)); - - // Transform screen point to WPF device independent point - PresentationSource source = PresentationSource.FromVisual(this); - Point targetPoints = source.CompositionTarget.TransformFromDevice.Transform(pos); - - // Log current delta between mouse and visual for use in drag cycle - var mousePosition = this.PointToScreenDPI(Mouse.GetPosition(this)); - - Point dragDelta = new Point(mousePosition.X - targetPoints.X, - mousePosition.Y - targetPoints.Y); - - manager.StartDraggingFloatingWindowForPane( paneModel, dragDelta ); + manager.StartDraggingFloatingWindowForPane( paneModel ); + } + else + { + var model = this.Model; + if( model != null ) + { + var root = model.Root; + if( root != null ) + { + var manager = root.Manager; + if( manager != null ) + { + manager.StartDraggingFloatingWindowForContent( model ); + } + } + } } } diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableFloatingWindowControl.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableFloatingWindowControl.cs index 799c8e11..485153d0 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableFloatingWindowControl.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableFloatingWindowControl.cs @@ -45,8 +45,8 @@ static LayoutAnchorableFloatingWindowControl() DefaultStyleKeyProperty.OverrideMetadata( typeof( LayoutAnchorableFloatingWindowControl ), new FrameworkPropertyMetadata( typeof( LayoutAnchorableFloatingWindowControl ) ) ); } - internal LayoutAnchorableFloatingWindowControl( LayoutAnchorableFloatingWindow model ) - : base( model ) + internal LayoutAnchorableFloatingWindowControl( LayoutAnchorableFloatingWindow model, bool isContentImmutable ) + : base( model, isContentImmutable ) { _model = model; HideWindowCommand = new RelayCommand( ( p ) => OnExecuteHideWindowCommand( p ), ( p ) => CanExecuteHideWindowCommand( p ) ); @@ -54,6 +54,11 @@ internal LayoutAnchorableFloatingWindowControl( LayoutAnchorableFloatingWindow m UpdateThemeResources(); } + internal LayoutAnchorableFloatingWindowControl( LayoutAnchorableFloatingWindow model) + : base( model, false ) + { + } + #endregion #region Properties @@ -139,8 +144,11 @@ protected override void OnInitialized( EventArgs e ) protected override void OnClosed( EventArgs e ) { var root = Model.Root; - root.Manager.RemoveFloatingWindow( this ); - root.CollectGarbage(); + if( root != null ) + { + root.Manager.RemoveFloatingWindow( this ); + root.CollectGarbage(); + } if( _overlayWindow != null ) { _overlayWindow.Close(); @@ -149,13 +157,11 @@ protected override void OnClosed( EventArgs e ) base.OnClosed( e ); - if( !CloseInitiatedByUser ) + if( !CloseInitiatedByUser && (root != null) ) { root.FloatingWindows.Remove( _model ); } - SetBinding(VisibilityProperty, string.Empty); - _model.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler( _model_PropertyChanged ); } diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableItem.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableItem.cs index 8a542007..62824834 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableItem.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableItem.cs @@ -298,6 +298,15 @@ internal override void Detach() base.Detach(); } + protected override bool CanExecuteDockAsDocumentCommand() + { + var canExecute = base.CanExecuteDockAsDocumentCommand(); + if( canExecute && ( _anchorable != null ) ) + return _anchorable.CanDockAsTabbedDocument; + + return canExecute; + } + protected override void Close() { if( ( _anchorable.Root != null ) && ( _anchorable.Root.Manager != null ) ) diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorablePaneControl.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorablePaneControl.cs index d4a42003..6e847ece 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorablePaneControl.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorablePaneControl.cs @@ -68,11 +68,8 @@ public ILayoutElement Model protected override void OnGotKeyboardFocus( System.Windows.Input.KeyboardFocusChangedEventArgs e ) { - if ((_model != null) && (_model.SelectedContent != null)) - { - _model.SelectedContent.IsActive = true; - } - + _model.SelectedContent.IsActive = true; + base.OnGotKeyboardFocus( e ); } @@ -80,20 +77,17 @@ protected override void OnMouseLeftButtonDown( System.Windows.Input.MouseButtonE { base.OnMouseLeftButtonDown( e ); - if( !e.Handled && ( _model != null ) && ( _model.SelectedContent != null ) ) - { + if( !e.Handled && _model.SelectedContent != null ) _model.SelectedContent.IsActive = true; - } } protected override void OnMouseRightButtonDown( System.Windows.Input.MouseButtonEventArgs e ) { base.OnMouseRightButtonDown( e ); - if( !e.Handled && ( _model != null ) && ( _model.SelectedContent != null ) ) - { + if( !e.Handled && _model.SelectedContent != null ) _model.SelectedContent.IsActive = true; - } + } diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableTabItem.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableTabItem.cs index 8a80b19e..9a78fa49 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableTabItem.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableTabItem.cs @@ -28,7 +28,6 @@ public class LayoutAnchorableTabItem : Control private bool _isMouseDown = false; private static LayoutAnchorableTabItem _draggingItem = null; - private static bool _cancelMouseLeave = false; #endregion @@ -147,10 +146,6 @@ protected override void OnMouseMove( System.Windows.Input.MouseEventArgs e ) _isMouseDown = false; _draggingItem = null; } - else - { - _cancelMouseLeave = false; - } } protected override void OnMouseLeftButtonUp( System.Windows.Input.MouseButtonEventArgs e ) @@ -168,23 +163,20 @@ protected override void OnMouseLeave( System.Windows.Input.MouseEventArgs e ) if( _isMouseDown && e.LeftButton == MouseButtonState.Pressed ) { - // drag the item if the mouse leave is not canceled. - // Mouse leave should be canceled when selecting a new tab to prevent automatic undock when Panel size is Auto. - _draggingItem = !_cancelMouseLeave ? this : null; + _draggingItem = this; } _isMouseDown = false; - _cancelMouseLeave = false; } protected override void OnMouseEnter( MouseEventArgs e ) { base.OnMouseEnter( e ); - if (_draggingItem != null && - _draggingItem != this && // Fix #1354 https://github.com/xceedsoftware/wpftoolkit/issues/1354 - e.LeftButton == MouseButtonState.Pressed) - { + if( _draggingItem != null + && _draggingItem != this + && e.LeftButton == MouseButtonState.Pressed ) + { var model = Model; var container = model.Parent as ILayoutContainer; var containerPane = model.Parent as ILayoutPane; @@ -222,11 +214,7 @@ internal static void ResetDraggingItem() { _draggingItem = null; } - internal static void CancelMouseLeave() - { - _cancelMouseLeave = true; - } - #endregion -} + #endregion + } } diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAutoHideWindowControl.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAutoHideWindowControl.cs index b59f1209..f56148b6 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAutoHideWindowControl.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutAutoHideWindowControl.cs @@ -164,16 +164,6 @@ protected override System.Runtime.InteropServices.HandleRef BuildWindowCore( Sys return new HandleRef( this, _internalHwndSource.Handle ); } - protected override IntPtr WndProc( IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled ) - { - if( msg == Win32Helper.WM_WINDOWPOSCHANGING ) - { - if( _internalHost_ContentRendered ) - Win32Helper.SetWindowPos( _internalHwndSource.Handle, Win32Helper.HWND_TOP, 0, 0, 0, 0, Win32Helper.SetWindowPosFlags.IgnoreMove | Win32Helper.SetWindowPosFlags.IgnoreResize ); - } - return base.WndProc( hwnd, msg, wParam, lParam, ref handled ); - } - protected override void DestroyWindowCore( System.Runtime.InteropServices.HandleRef hwnd ) { if( _internalHwndSource != null ) @@ -184,11 +174,6 @@ protected override void DestroyWindowCore( System.Runtime.InteropServices.Handle } } - public override void OnApplyTemplate() - { - base.OnApplyTemplate(); - } - protected override bool HasFocusWithinCore() { return false; @@ -243,6 +228,7 @@ internal void Show( LayoutAnchorControl anchor ) Visibility = System.Windows.Visibility.Visible; InvalidateMeasure(); UpdateWindowPos(); + Win32Helper.BringWindowToTop( _internalHwndSource.Handle ); } internal void Hide() diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutDocumentFloatingWindowControl.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutDocumentFloatingWindowControl.cs index bd8ddebd..329e6c66 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutDocumentFloatingWindowControl.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutDocumentFloatingWindowControl.cs @@ -37,13 +37,18 @@ static LayoutDocumentFloatingWindowControl() DefaultStyleKeyProperty.OverrideMetadata( typeof( LayoutDocumentFloatingWindowControl ), new FrameworkPropertyMetadata( typeof( LayoutDocumentFloatingWindowControl ) ) ); } - internal LayoutDocumentFloatingWindowControl( LayoutDocumentFloatingWindow model ) - : base( model ) + internal LayoutDocumentFloatingWindowControl( LayoutDocumentFloatingWindow model, bool isContentImmutable ) + : base( model, isContentImmutable ) { _model = model; UpdateThemeResources(); } + internal LayoutDocumentFloatingWindowControl( LayoutDocumentFloatingWindow model ) + : base( model, false ) + { + } + #endregion #region Properties diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutDocumentTabItem.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutDocumentTabItem.cs index a087cd3e..79a3572e 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutDocumentTabItem.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutDocumentTabItem.cs @@ -143,6 +143,10 @@ protected override void OnMouseLeftButtonDown( System.Windows.Input.MouseButtonE Model.IsActive = true; + var layoutDocument = Model as LayoutDocument; + if( ( layoutDocument != null ) && !layoutDocument.CanMove ) + return; + if( e.ClickCount == 1 ) { _mouseDownPoint = e.GetPosition( this ); @@ -257,21 +261,7 @@ private void StartDraggingFloatingWindowForContent() ( ( LayoutAnchorable )this.Model ).ResetCanCloseInternal(); } var manager = this.Model.Root.Manager; - - // Get psotion of this visual on screen - var pos = this.PointToScreen(new Point(0, 0)); - - // Transform screen point to WPF device independent point - PresentationSource source = PresentationSource.FromVisual(this); - Point targetPoints = source.CompositionTarget.TransformFromDevice.Transform(pos); - - // Log current delta between mouse and visual for use in drag cycle - var mousePosition = this.PointToScreenDPI(Mouse.GetPosition(this)); - - Point dragDelta = new Point(mousePosition.X - targetPoints.X, - mousePosition.Y - targetPoints.Y); - - manager.StartDraggingFloatingWindowForContent( this.Model, true, dragDelta ); + manager.StartDraggingFloatingWindowForContent( this.Model ); } #endregion diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutFloatingWindowControl.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutFloatingWindowControl.cs index 5297dae0..98290ece 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutFloatingWindowControl.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutFloatingWindowControl.cs @@ -41,6 +41,7 @@ public abstract class LayoutFloatingWindowControl : Window, ILayoutControl private HwndSourceHook _hwndSrcHook; private DragService _dragService = null; private bool _internalCloseFlag = false; + private bool _isClosing = false; #endregion @@ -58,25 +59,20 @@ protected LayoutFloatingWindowControl( ILayoutElement model ) this.Loaded += new RoutedEventHandler( OnLoaded ); this.Unloaded += new RoutedEventHandler( OnUnloaded ); _model = model; + } - DragDelta = default(Point); + protected LayoutFloatingWindowControl( ILayoutElement model, bool isContentImmutable ) + : this( model ) + { + this.IsContentImmutable = isContentImmutable; } #endregion #region Properties - /// - /// Gets/Sets the X,Y delta between the elemnt being dragged and the - /// mouse position. The value of this property is used during the drag - /// cycle to position the dragged item under the mouse pointer. - /// - /// Set this property on intialization to ensure that - /// the delta between mouse and control being dragged - /// remains constant. - /// - internal Point DragDelta { get; set; } #region Model + public abstract ILayoutElement Model { get; @@ -84,6 +80,32 @@ public abstract ILayoutElement Model #endregion + #region IsContentImmutable + + /// + /// IsContentImmutable Dependency Property + /// + public static readonly DependencyProperty IsContentImmutableProperty = DependencyProperty.Register( "IsContentImmutable", typeof( bool ), typeof( LayoutFloatingWindowControl ), + new FrameworkPropertyMetadata( (bool)false ) ); + + /// + /// Gets/sets the IsContentImmutable property. This dependency property + /// indicates if the content can be modified. + /// + public bool IsContentImmutable + { + get + { + return (bool)GetValue( IsContentImmutableProperty ); + } + private set + { + SetValue( IsContentImmutableProperty, value ); + } + } + + #endregion + #region IsDragging /// @@ -313,7 +335,7 @@ protected virtual IntPtr FilterMessage( IntPtr hwnd, int msg, IntPtr wParam, Int switch( msg ) { case Win32Helper.WM_ACTIVATE: - if( ( ( int )wParam & 0xFFFF ) == Win32Helper.WA_INACTIVE ) + if( ( (int)wParam & 0xFFFF ) == Win32Helper.WA_INACTIVE ) { if( lParam == this.GetParentWindowHandle() ) { @@ -356,7 +378,7 @@ protected virtual IntPtr FilterMessage( IntPtr hwnd, int msg, IntPtr wParam, Int } break; case Win32Helper.WM_SYSCOMMAND: - int command = ( int )wParam & 0xFFF0; + int command = (int)wParam & 0xFFF0; if( command == Win32Helper.SC_MAXIMIZE || command == Win32Helper.SC_RESTORE ) { UpdateMaximizedState( command == Win32Helper.SC_MAXIMIZE ); @@ -371,15 +393,12 @@ protected virtual IntPtr FilterMessage( IntPtr hwnd, int msg, IntPtr wParam, Int internal void InternalClose() { - // Check before Close in InternalClose - // https://github.com/xceedsoftware/wpftoolkit/issues/1310 - if( _internalCloseFlag ) + _internalCloseFlag = true; + if( !_isClosing ) { - return; + _isClosing = true; + this.Close(); } - - _internalCloseFlag = true; - Close(); } #endregion @@ -388,7 +407,14 @@ internal void InternalClose() private static object CoerceContentValue( DependencyObject sender, object content ) { - return new FloatingWindowContentHost( sender as LayoutFloatingWindowControl ) { Content = content as UIElement }; + var lfwc = sender as LayoutFloatingWindowControl; + if( lfwc != null ) + { + if( lfwc.IsLoaded && lfwc.IsContentImmutable ) + return lfwc.Content; + return new FloatingWindowContentHost( sender as LayoutFloatingWindowControl ) { Content = content as UIElement }; + } + return null; } private void OnLoaded( object sender, RoutedEventArgs e ) @@ -425,15 +451,11 @@ private void OnActivated( object sender, EventArgs e ) { IntPtr windowHandle = new WindowInteropHelper( this ).Handle; var mousePosition = this.PointToScreenDPI( Mouse.GetPosition( this ) ); + var clientArea = Win32Helper.GetClientRect( windowHandle ); + var windowArea = Win32Helper.GetWindowRect( windowHandle ); - // BugFix Issue #6 - // This code is initializes the drag when content (document or toolwindow) is dragged - // A second chance back up plan if DragDelta is not set - if (DragDelta == default(Point)) - DragDelta = new Point(3, 3); - - Left = mousePosition.X - DragDelta.X; // BugFix Issue #6 - Top = mousePosition.Y - DragDelta.Y; + Left = mousePosition.X - windowArea.Width / 2.0; + Top = mousePosition.Y - ( windowArea.Height - clientArea.Height ) / 2.0; _attachDrag = false; IntPtr lParam = new IntPtr( ( ( int )mousePosition.X & ( int )0xFFFF ) | ( ( ( int )mousePosition.Y ) << 16 ) ); @@ -497,6 +519,9 @@ public FloatingWindowContentHost( LayoutFloatingWindowControl owner ) { _owner = owner; var manager = _owner.Model.Root.Manager; + + var binding = new Binding( "SizeToContent" ) { Source = _owner }; + BindingOperations.SetBinding( this, FloatingWindowContentHost.SizeToContentProperty, binding ); } #endregion @@ -544,16 +569,72 @@ public UIElement Content /// private static void OnContentChanged( DependencyObject d, DependencyPropertyChangedEventArgs e ) { - ( ( FloatingWindowContentHost )d ).OnContentChanged( e ); + ( ( FloatingWindowContentHost )d ).OnContentChanged( (UIElement)e.OldValue, (UIElement)e.NewValue ); } /// /// Provides derived classes an opportunity to handle changes to the Content property. /// - protected virtual void OnContentChanged( DependencyPropertyChangedEventArgs e ) + protected virtual void OnContentChanged( UIElement oldValue, UIElement newValue ) { if( _rootPresenter != null ) _rootPresenter.Child = Content; + + var oldContent = oldValue as FrameworkElement; + if( oldContent != null ) + { + oldContent.SizeChanged -= this.Content_SizeChanged; + } + + var newContent = newValue as FrameworkElement; + if( newContent != null ) + { + newContent.SizeChanged += this.Content_SizeChanged; + } + } + + #endregion + + #region SizeToContent + + /// + /// SizeToContent Dependency Property + /// + public static readonly DependencyProperty SizeToContentProperty = DependencyProperty.Register( "SizeToContent", typeof( SizeToContent ), typeof( FloatingWindowContentHost ), + new FrameworkPropertyMetadata( SizeToContent.Manual, new PropertyChangedCallback( OnSizeToContentChanged ) ) ); + + /// + /// Gets or sets the SizeToContent property. + /// + public SizeToContent SizeToContent + { + get + { + return (SizeToContent)GetValue( SizeToContentProperty ); + } + set + { + SetValue( SizeToContentProperty, value ); + } + } + + /// + /// Handles changes to the SizeToContent property. + /// + private static void OnSizeToContentChanged( DependencyObject d, DependencyPropertyChangedEventArgs e ) + { + ( (FloatingWindowContentHost)d ).OnSizeToContentChanged( (SizeToContent)e.OldValue, (SizeToContent)e.NewValue ); + } + + /// + /// Provides derived classes an opportunity to handle changes to the SizeToContent property. + /// + protected virtual void OnSizeToContentChanged( SizeToContent oldValue, SizeToContent newValue ) + { + if( _wpfContentHost != null ) + { + _wpfContentHost.SizeToContent = newValue; + } } #endregion @@ -575,7 +656,7 @@ protected override System.Runtime.InteropServices.HandleRef BuildWindowCore( Sys _rootPresenter = new Border() { Child = new AdornerDecorator() { Child = Content }, Focusable = true }; _rootPresenter.SetBinding( Border.BackgroundProperty, new Binding( "Background" ) { Source = _owner } ); _wpfContentHost.RootVisual = _rootPresenter; - _wpfContentHost.SizeToContent = SizeToContent.Manual; + _manager = _owner.Model.Root.Manager; _manager.InternalAddLogicalChild( _rootPresenter ); @@ -602,6 +683,16 @@ protected override Size MeasureOverride( Size constraint ) } #endregion + + #region Event Handlers + + private void Content_SizeChanged( object sender, SizeChangedEventArgs e ) + { + this.InvalidateMeasure(); + this.InvalidateArrange(); + } + + #endregion } #endregion diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutGridControl.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutGridControl.cs index ebb000c9..1ffc91ea 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutGridControl.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutGridControl.cs @@ -95,13 +95,9 @@ protected override void OnInitialized( EventArgs e ) _model.ChildrenTreeChanged += ( s, args ) => { - if (args.Change != ChildrenTreeChange.DirectChildrenChanged) - return; - - if ( _asyncRefreshCalled.HasValue && - _asyncRefreshCalled.Value == args.Change ) + if( _asyncRefreshCalled.HasValue && + _asyncRefreshCalled.Value == args.Change ) return; - _asyncRefreshCalled = args.Change; Dispatcher.BeginInvoke( new Action( () => { @@ -419,9 +415,7 @@ private void OnSplitterDragCompleted( object sender, System.Windows.Controls.Pri } else { - var width = ( prevChildModel.DockWidth.IsAuto ) ? prevChildActualSize.Width : prevChildModel.DockWidth.Value; - var resizedWidth = width + delta; - prevChildModel.DockWidth = new GridLength(double.IsNaN(resizedWidth) ? width : resizedWidth, GridUnitType.Pixel ); + prevChildModel.DockWidth = new GridLength( prevChildModel.DockWidth.Value + delta, GridUnitType.Pixel ); } if( nextChildModel.DockWidth.IsStar ) @@ -430,9 +424,7 @@ private void OnSplitterDragCompleted( object sender, System.Windows.Controls.Pri } else { - var width = ( nextChildModel.DockWidth.IsAuto ) ? nextChildActualSize.Width : nextChildModel.DockWidth.Value; - var resizedWidth = width - delta; - nextChildModel.DockWidth = new GridLength(double.IsNaN(resizedWidth) ? width : resizedWidth, GridUnitType.Pixel); + nextChildModel.DockWidth = new GridLength( nextChildModel.DockWidth.Value - delta, GridUnitType.Pixel ); } } else @@ -443,9 +435,7 @@ private void OnSplitterDragCompleted( object sender, System.Windows.Controls.Pri } else { - var height = ( prevChildModel.DockHeight.IsAuto ) ? prevChildActualSize.Height : prevChildModel.DockHeight.Value; - var resizedHeight = height + delta; - prevChildModel.DockHeight = new GridLength(double.IsNaN(resizedHeight) ? height : resizedHeight, GridUnitType.Pixel ); + prevChildModel.DockHeight = new GridLength( prevChildModel.DockHeight.Value + delta, GridUnitType.Pixel ); } if( nextChildModel.DockHeight.IsStar ) @@ -454,9 +444,7 @@ private void OnSplitterDragCompleted( object sender, System.Windows.Controls.Pri } else { - var height = ( nextChildModel.DockHeight.IsAuto ) ? nextChildActualSize.Height : nextChildModel.DockHeight.Value; - var resizedHeight = height - delta; - nextChildModel.DockHeight = new GridLength(double.IsNaN(resizedHeight) ? height : resizedHeight, GridUnitType.Pixel ); + nextChildModel.DockHeight = new GridLength( nextChildModel.DockHeight.Value - delta, GridUnitType.Pixel ); } } diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutItem.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutItem.cs index 7ca82af1..8e83d835 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutItem.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/LayoutItem.cs @@ -89,18 +89,14 @@ public ContentPresenter View { get { - if (_view == null) + if( _view == null ) { - _view = new ContentPresenter(); + _view = new ContentPresenter(); - _view.SetBinding(ContentPresenter.ContentProperty, new Binding("Content") { Source = LayoutElement }); - - if ((LayoutElement != null) && (LayoutElement.Root != null)) - { - _view.SetBinding(ContentPresenter.ContentTemplateProperty, new Binding("LayoutItemTemplate") { Source = LayoutElement?.Root?.Manager }); - _view.SetBinding(ContentPresenter.ContentTemplateSelectorProperty, new Binding("LayoutItemTemplateSelector") { Source = LayoutElement?.Root?.Manager }); - LayoutElement?.Root?.Manager.InternalAddLogicalChild(_view); - } + _view.SetBinding( ContentPresenter.ContentProperty, new Binding( "Content" ) { Source = LayoutElement } ); + _view.SetBinding( ContentPresenter.ContentTemplateProperty, new Binding( "LayoutItemTemplate" ) { Source = LayoutElement.Root.Manager } ); + _view.SetBinding( ContentPresenter.ContentTemplateSelectorProperty, new Binding( "LayoutItemTemplateSelector" ) { Source = LayoutElement.Root.Manager } ); + LayoutElement.Root.Manager.InternalAddLogicalChild( _view ); } return _view; @@ -603,9 +599,14 @@ private static object CoerceDockAsDocumentCommandValue( DependencyObject d, obje return value; } + protected virtual bool CanExecuteDockAsDocumentCommand() + { + return ( LayoutElement != null && LayoutElement.FindParent() == null ); + } + private bool CanExecuteDockAsDocumentCommand( object parameter ) { - return LayoutElement != null && LayoutElement.FindParent() == null; + return this.CanExecuteDockAsDocumentCommand(); } private void ExecuteDockAsDocumentCommand( object parameter ) @@ -849,6 +850,9 @@ private bool CanExecuteNewVerticalTabGroupCommand( object parameter ) { if( LayoutElement == null ) return false; + var layoutDocument = LayoutElement as LayoutDocument; + if( ( layoutDocument != null ) && !layoutDocument.CanMove ) + return false; var parentDocumentGroup = LayoutElement.FindParent(); var parentDocumentPane = LayoutElement.Parent as LayoutDocumentPane; return ( ( parentDocumentGroup == null || @@ -924,6 +928,9 @@ private bool CanExecuteNewHorizontalTabGroupCommand( object parameter ) { if( LayoutElement == null ) return false; + var layoutDocument = LayoutElement as LayoutDocument; + if( ( layoutDocument != null ) && !layoutDocument.CanMove ) + return false; var parentDocumentGroup = LayoutElement.FindParent(); var parentDocumentPane = LayoutElement.Parent as LayoutDocumentPane; return ( ( parentDocumentGroup == null || diff --git a/source/Components/Xceed.Wpf.AvalonDock/Controls/OverlayWindow.cs b/source/Components/Xceed.Wpf.AvalonDock/Controls/OverlayWindow.cs index e76d5882..ccc2717b 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Controls/OverlayWindow.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Controls/OverlayWindow.cs @@ -493,12 +493,20 @@ void IOverlayWindow.DragLeave( LayoutFloatingWindowControl floatingWindow ) void IOverlayWindow.DragEnter( IDropArea area ) { + var floatingWindowManager = _floatingWindow.Model.Root.Manager; + _visibleAreas.Add( area ); FrameworkElement areaElement; switch( area.Type ) { case DropAreaType.DockingManager: + var dropAreaDockingManager = area as DropArea; + if( dropAreaDockingManager.AreaElement != floatingWindowManager ) + { + _visibleAreas.Remove( area ); + return; + } areaElement = _gridDockingManagerDropTargets; break; case DropAreaType.AnchorablePane: @@ -506,6 +514,11 @@ void IOverlayWindow.DragEnter( IDropArea area ) var dropAreaAnchorablePaneGroup = area as DropArea; var layoutAnchorablePane = dropAreaAnchorablePaneGroup.AreaElement.Model as LayoutAnchorablePane; + if( layoutAnchorablePane.Root.Manager != floatingWindowManager ) + { + _visibleAreas.Remove( area ); + return; + } SetDropTargetIntoVisibility( layoutAnchorablePane ); break; case DropAreaType.DocumentPaneGroup: @@ -514,7 +527,11 @@ void IOverlayWindow.DragEnter( IDropArea area ) var dropAreaDocumentPaneGroup = area as DropArea; var layoutDocumentPane = ( dropAreaDocumentPaneGroup.AreaElement.Model as LayoutDocumentPaneGroup ).Children.First() as LayoutDocumentPane; var parentDocumentPaneGroup = layoutDocumentPane.Parent as LayoutDocumentPaneGroup; - + if( parentDocumentPaneGroup.Root.Manager != floatingWindowManager ) + { + _visibleAreas.Remove( area ); + return; + } _documentPaneDropTargetLeft.Visibility = Visibility.Hidden; _documentPaneDropTargetRight.Visibility = Visibility.Hidden; _documentPaneDropTargetTop.Visibility = Visibility.Hidden; @@ -531,6 +548,11 @@ void IOverlayWindow.DragEnter( IDropArea area ) var dropAreaDocumentPaneGroup = area as DropArea; var layoutDocumentPane = dropAreaDocumentPaneGroup.AreaElement.Model as LayoutDocumentPane; var parentDocumentPaneGroup = layoutDocumentPane.Parent as LayoutDocumentPaneGroup; + if( layoutDocumentPane.Root.Manager != floatingWindowManager ) + { + _visibleAreas.Remove( area ); + return; + } SetDropTargetIntoVisibility( layoutDocumentPane ); @@ -622,6 +644,11 @@ void IOverlayWindow.DragEnter( IDropArea area ) var dropAreaDocumentPaneGroup = area as DropArea; var layoutDocumentPane = dropAreaDocumentPaneGroup.AreaElement.Model as LayoutDocumentPane; var parentDocumentPaneGroup = layoutDocumentPane.Parent as LayoutDocumentPaneGroup; + if( layoutDocumentPane.Root.Manager != floatingWindowManager ) + { + _visibleAreas.Remove( area ); + return; + } SetDropTargetIntoVisibility( layoutDocumentPane ); diff --git a/source/Components/Xceed.Wpf.AvalonDock/DockingManager.cs b/source/Components/Xceed.Wpf.AvalonDock/DockingManager.cs index a63063c4..2fb46036 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/DockingManager.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/DockingManager.cs @@ -1983,6 +1983,34 @@ public LayoutItem GetLayoutItemFromModel( LayoutContent content ) return _layoutItems.FirstOrDefault( item => item.LayoutElement == content ); } + public LayoutFloatingWindowControl CreateFloatingWindow( LayoutContent contentModel, bool isContentImmutable ) + { + LayoutFloatingWindowControl lfwc = null; + + if( contentModel is LayoutAnchorable ) + { + var parent = contentModel.Parent as ILayoutPane; + if( parent == null ) + { + var pane = new LayoutAnchorablePane( contentModel as LayoutAnchorable ) + { + FloatingTop = contentModel.FloatingTop, + FloatingLeft = contentModel.FloatingLeft, + FloatingWidth = contentModel.FloatingWidth, + FloatingHeight = contentModel.FloatingHeight + }; + lfwc = this.CreateFloatingWindowForLayoutAnchorableWithoutParent( pane, isContentImmutable ); + } + } + + if( lfwc == null ) + { + lfwc = this.CreateFloatingWindowCore( contentModel, isContentImmutable ); + } + + return lfwc; + } + #endregion #region Internal Methods @@ -2046,7 +2074,12 @@ internal UIElement CreateUIElementForModel( ILayoutElement model ) } newFW.ShowInTaskbar = false; - newFW.Show(); + + Dispatcher.BeginInvoke( new Action( () => + { + newFW.Show(); + } ), DispatcherPriority.Send ); + // Do not set the WindowState before showing or it will be lost if( paneForExtensions != null && paneForExtensions.IsMaximized ) { @@ -2126,208 +2159,28 @@ internal FrameworkElement GetAutoHideAreaElement() return _autohideArea; } - internal void StartDraggingFloatingWindowForContent( LayoutContent contentModel, - bool startDrag = true , - Point dragDelta = default(Point)) + internal void StartDraggingFloatingWindowForContent( LayoutContent contentModel, bool startDrag = true ) { - if( !contentModel.CanFloat ) - return; - var contentModelAsAnchorable = contentModel as LayoutAnchorable; - if( contentModelAsAnchorable != null && - contentModelAsAnchorable.IsAutoHidden ) - contentModelAsAnchorable.ToggleAutoHide(); - - var parentPane = contentModel.Parent as ILayoutPane; - var parentPaneAsPositionableElement = contentModel.Parent as ILayoutPositionableElement; - var parentPaneAsWithActualSize = contentModel.Parent as ILayoutPositionableElementWithActualSize; - var contentModelParentChildrenIndex = parentPane.Children.ToList().IndexOf( contentModel ); - - if( contentModel.FindParent() == null ) + var fwc = this.CreateFloatingWindow( contentModel, false ); + if( fwc != null ) { - ( ( ILayoutPreviousContainer )contentModel ).PreviousContainer = parentPane; - contentModel.PreviousContainerIndex = contentModelParentChildrenIndex; - } - - parentPane.RemoveChildAt( contentModelParentChildrenIndex ); - - double fwWidth = contentModel.FloatingWidth; - double fwHeight = contentModel.FloatingHeight; - - if( fwWidth == 0.0 ) - fwWidth = parentPaneAsPositionableElement.FloatingWidth; - if( fwHeight == 0.0 ) - fwHeight = parentPaneAsPositionableElement.FloatingHeight; - - if( fwWidth == 0.0 ) - fwWidth = parentPaneAsWithActualSize.ActualWidth + 10; //10 includes BorderThickness and Margins inside LayoutDocumentFloatingWindowControl. - if( fwHeight == 0.0 ) - fwHeight = parentPaneAsWithActualSize.ActualHeight + 10; //10 includes BorderThickness and Margins inside LayoutDocumentFloatingWindowControl. - - LayoutFloatingWindow fw; - LayoutFloatingWindowControl fwc; - if( contentModel is LayoutAnchorable ) - { - var anchorableContent = contentModel as LayoutAnchorable; - fw = new LayoutAnchorableFloatingWindow() + Dispatcher.BeginInvoke( new Action( () => { - RootPanel = new LayoutAnchorablePaneGroup( - new LayoutAnchorablePane( anchorableContent ) - { - DockWidth = parentPaneAsPositionableElement.DockWidth, - DockHeight = parentPaneAsPositionableElement.DockHeight, - DockMinHeight = parentPaneAsPositionableElement.DockMinHeight, - DockMinWidth = parentPaneAsPositionableElement.DockMinWidth, - FloatingLeft = parentPaneAsPositionableElement.FloatingLeft, - FloatingTop = parentPaneAsPositionableElement.FloatingTop, - FloatingWidth = parentPaneAsPositionableElement.FloatingWidth, - FloatingHeight = parentPaneAsPositionableElement.FloatingHeight, - } ) - }; - - Layout.FloatingWindows.Add( fw ); - - fwc = new LayoutAnchorableFloatingWindowControl( - fw as LayoutAnchorableFloatingWindow ) - { - Width = fwWidth, - Height = fwHeight, - Left = contentModel.FloatingLeft, - Top = contentModel.FloatingTop, - DragDelta = dragDelta // Setup initial tool window drag delta - }; + if( startDrag ) + fwc.AttachDrag(); + fwc.Show(); + } ), DispatcherPriority.Send ); } - else - { - var anchorableDocument = contentModel as LayoutDocument; - fw = new LayoutDocumentFloatingWindow() - { - RootDocument = anchorableDocument - }; - - Layout.FloatingWindows.Add( fw ); - - fwc = new LayoutDocumentFloatingWindowControl( - fw as LayoutDocumentFloatingWindow ) - { - Width = fwWidth, - Height = fwHeight, - Left = contentModel.FloatingLeft, - Top = contentModel.FloatingTop, - DragDelta = dragDelta // Setup initial document window drag delta - }; - } - - - //fwc.Owner = Window.GetWindow(this); - //fwc.SetParentToMainWindowOf(this); - - - _fwList.Add( fwc ); - - Layout.CollectGarbage(); - - UpdateLayout(); - - Dispatcher.BeginInvoke( new Action( () => - { - if( startDrag ) - fwc.AttachDrag(); - fwc.Show(); - } ), DispatcherPriority.Send ); } - internal void StartDraggingFloatingWindowForPane( LayoutAnchorablePane paneModel, - Point dragDelta) + internal void StartDraggingFloatingWindowForPane( LayoutAnchorablePane paneModel ) { - if( paneModel.Children.Any( c => !c.CanFloat ) ) - return; - var paneAsPositionableElement = paneModel as ILayoutPositionableElement; - var paneAsWithActualSize = paneModel as ILayoutPositionableElementWithActualSize; - - double fwWidth = paneAsPositionableElement.FloatingWidth; - double fwHeight = paneAsPositionableElement.FloatingHeight; - double fwLeft = paneAsPositionableElement.FloatingLeft; - double fwTop = paneAsPositionableElement.FloatingTop; - - if( fwWidth == 0.0 ) - fwWidth = paneAsWithActualSize.ActualWidth + 10; //10 includes BorderThickness and Margins inside LayoutAnchorableFloatingWindowControl. - if( fwHeight == 0.0 ) - fwHeight = paneAsWithActualSize.ActualHeight + 10; //10 includes BorderThickness and Margins inside LayoutAnchorableFloatingWindowControl. - - var destPane = new LayoutAnchorablePane() - { - DockWidth = paneAsPositionableElement.DockWidth, - DockHeight = paneAsPositionableElement.DockHeight, - DockMinHeight = paneAsPositionableElement.DockMinHeight, - DockMinWidth = paneAsPositionableElement.DockMinWidth, - FloatingLeft = paneAsPositionableElement.FloatingLeft, - FloatingTop = paneAsPositionableElement.FloatingTop, - FloatingWidth = paneAsPositionableElement.FloatingWidth, - FloatingHeight = paneAsPositionableElement.FloatingHeight, - }; - - bool savePreviousContainer = paneModel.FindParent() == null; - int currentSelectedContentIndex = paneModel.SelectedContentIndex; - while( paneModel.Children.Count > 0 ) - { - var contentModel = paneModel.Children[ paneModel.Children.Count - 1 ] as LayoutAnchorable; - - if( savePreviousContainer ) - { - var contentModelAsPreviousContainer = contentModel as ILayoutPreviousContainer; - contentModelAsPreviousContainer.PreviousContainer = paneModel; - contentModel.PreviousContainerIndex = paneModel.Children.Count - 1; - } - - paneModel.RemoveChildAt( paneModel.Children.Count - 1 ); - destPane.Children.Insert( 0, contentModel ); - } - - if( destPane.Children.Count > 0 ) + var fwc = this.CreateFloatingWindowForLayoutAnchorableWithoutParent( paneModel, false ); + if( fwc != null ) { - destPane.SelectedContentIndex = currentSelectedContentIndex; + fwc.AttachDrag(); + fwc.Show(); } - - - LayoutFloatingWindow fw; - LayoutFloatingWindowControl fwc; - fw = new LayoutAnchorableFloatingWindow() - { - RootPanel = new LayoutAnchorablePaneGroup( - destPane ) - { - DockHeight = destPane.DockHeight, - DockWidth = destPane.DockWidth, - DockMinHeight = destPane.DockMinHeight, - DockMinWidth = destPane.DockMinWidth, - } - }; - - Layout.FloatingWindows.Add( fw ); - - fwc = new LayoutAnchorableFloatingWindowControl( - fw as LayoutAnchorableFloatingWindow ) - { - Width = fwWidth, - Height = fwHeight, - DragDelta = dragDelta - }; - - - - //fwc.Owner = Window.GetWindow(this); - //fwc.SetParentToMainWindowOf(this); - - - _fwList.Add( fwc ); - - Layout.CollectGarbage(); - - InvalidateArrange(); - - fwc.AttachDrag(); - fwc.Show(); - } internal IEnumerable GetFloatingWindowsByZOrder() @@ -2520,7 +2373,6 @@ private void DockingManager_Loaded( object sender, RoutedEventArgs e ) private void DockingManager_Unloaded( object sender, RoutedEventArgs e ) { - if( !DesignerProperties.GetIsInDesignMode( this ) ) { if( _autoHideWindowManager != null ) @@ -2529,7 +2381,9 @@ private void DockingManager_Unloaded( object sender, RoutedEventArgs e ) } if( AutoHideWindow != null ) + { AutoHideWindow.Dispose(); + } foreach( var fw in _fwList.ToArray() ) { @@ -2538,6 +2392,7 @@ private void DockingManager_Unloaded( object sender, RoutedEventArgs e ) fw.KeepContentVisibleOnClose = true; fw.Close(); } + _fwList.Clear(); DestroyOverlayWindow(); FocusElementManager.FinalizeFocusManagement( this ); @@ -2552,7 +2407,9 @@ private void SetupAutoHideWindow() _autoHideWindowManager = new AutoHideWindowManager( this ); if( AutoHideWindow != null ) + { AutoHideWindow.Dispose(); + } SetAutoHideWindow( new LayoutAutoHideWindowControl() ); } @@ -3165,8 +3022,8 @@ private void CreateAnchorableLayoutItem( LayoutAnchorable contentToAttach ) var layoutItem = new LayoutAnchorableItem(); layoutItem.Attach( contentToAttach ); - _layoutItems.Add( layoutItem ); // #1430 - ApplyStyleToLayoutItem( layoutItem ); // #1430 + ApplyStyleToLayoutItem( layoutItem ); + _layoutItems.Add( layoutItem ); if( contentToAttach != null && contentToAttach.Content != null && @@ -3190,8 +3047,8 @@ private void CreateDocumentLayoutItem( LayoutDocument contentToAttach ) var layoutItem = new LayoutDocumentItem(); layoutItem.Attach( contentToAttach ); - _layoutItems.Add( layoutItem ); // #1430 - ApplyStyleToLayoutItem( layoutItem ); // #1430 + ApplyStyleToLayoutItem( layoutItem ); + _layoutItems.Add( layoutItem ); if( contentToAttach != null && contentToAttach.Content != null && @@ -3217,6 +3074,199 @@ private void ShowNavigatorWindow() _navigatorWindow = null; } + private LayoutFloatingWindowControl CreateFloatingWindowForLayoutAnchorableWithoutParent( LayoutAnchorablePane paneModel, bool isContentImmutable ) + { + if( paneModel.Children.Any( c => !c.CanFloat ) ) + return null; + var paneAsPositionableElement = paneModel as ILayoutPositionableElement; + var paneAsWithActualSize = paneModel as ILayoutPositionableElementWithActualSize; + + double fwWidth = paneAsPositionableElement.FloatingWidth; + double fwHeight = paneAsPositionableElement.FloatingHeight; + double fwLeft = paneAsPositionableElement.FloatingLeft; + double fwTop = paneAsPositionableElement.FloatingTop; + + if( fwWidth == 0.0 ) + fwWidth = paneAsWithActualSize.ActualWidth + 10; //10 includes BorderThickness and Margins inside LayoutAnchorableFloatingWindowControl. + if( fwHeight == 0.0 ) + fwHeight = paneAsWithActualSize.ActualHeight + 10; //10 includes BorderThickness and Margins inside LayoutAnchorableFloatingWindowControl. + + var destPane = new LayoutAnchorablePane() + { + DockWidth = paneAsPositionableElement.DockWidth, + DockHeight = paneAsPositionableElement.DockHeight, + DockMinHeight = paneAsPositionableElement.DockMinHeight, + DockMinWidth = paneAsPositionableElement.DockMinWidth, + FloatingLeft = paneAsPositionableElement.FloatingLeft, + FloatingTop = paneAsPositionableElement.FloatingTop, + FloatingWidth = paneAsPositionableElement.FloatingWidth, + FloatingHeight = paneAsPositionableElement.FloatingHeight, + }; + + bool savePreviousContainer = paneModel.FindParent() == null; + int currentSelectedContentIndex = paneModel.SelectedContentIndex; + while( paneModel.Children.Count > 0 ) + { + var contentModel = paneModel.Children[ paneModel.Children.Count - 1 ] as LayoutAnchorable; + + if( savePreviousContainer ) + { + var contentModelAsPreviousContainer = contentModel as ILayoutPreviousContainer; + contentModelAsPreviousContainer.PreviousContainer = paneModel; + contentModel.PreviousContainerIndex = paneModel.Children.Count - 1; + } + + paneModel.RemoveChildAt( paneModel.Children.Count - 1 ); + destPane.Children.Insert( 0, contentModel ); + } + + if( destPane.Children.Count > 0 ) + { + destPane.SelectedContentIndex = currentSelectedContentIndex; + } + + + LayoutFloatingWindow fw; + LayoutFloatingWindowControl fwc; + fw = new LayoutAnchorableFloatingWindow() + { + RootPanel = new LayoutAnchorablePaneGroup( + destPane ) + { + DockHeight = destPane.DockHeight, + DockWidth = destPane.DockWidth, + DockMinHeight = destPane.DockMinHeight, + DockMinWidth = destPane.DockMinWidth, + } + }; + + Layout.FloatingWindows.Add( fw ); + + fwc = new LayoutAnchorableFloatingWindowControl( + fw as LayoutAnchorableFloatingWindow, isContentImmutable ) + { + Width = fwWidth, + Height = fwHeight, + Top = fwTop, + Left = fwLeft + }; + + + + //fwc.Owner = Window.GetWindow(this); + //fwc.SetParentToMainWindowOf(this); + + + _fwList.Add( fwc ); + + Layout.CollectGarbage(); + + InvalidateArrange(); + + return fwc; + } + + private LayoutFloatingWindowControl CreateFloatingWindowCore( LayoutContent contentModel, bool isContentImmutable ) + { + if( !contentModel.CanFloat ) + return null; + var contentModelAsAnchorable = contentModel as LayoutAnchorable; + if( contentModelAsAnchorable != null && + contentModelAsAnchorable.IsAutoHidden ) + contentModelAsAnchorable.ToggleAutoHide(); + + var parentPane = contentModel.Parent as ILayoutPane; + var parentPaneAsPositionableElement = contentModel.Parent as ILayoutPositionableElement; + var parentPaneAsWithActualSize = contentModel.Parent as ILayoutPositionableElementWithActualSize; + var contentModelParentChildrenIndex = parentPane.Children.ToList().IndexOf( contentModel ); + + if( contentModel.FindParent() == null ) + { + ( (ILayoutPreviousContainer)contentModel ).PreviousContainer = parentPane; + contentModel.PreviousContainerIndex = contentModelParentChildrenIndex; + } + + parentPane.RemoveChildAt( contentModelParentChildrenIndex ); + + double fwWidth = contentModel.FloatingWidth; + double fwHeight = contentModel.FloatingHeight; + + if( fwWidth == 0.0 ) + fwWidth = parentPaneAsPositionableElement.FloatingWidth; + if( fwHeight == 0.0 ) + fwHeight = parentPaneAsPositionableElement.FloatingHeight; + + if( fwWidth == 0.0 ) + fwWidth = parentPaneAsWithActualSize.ActualWidth + 10; //10 includes BorderThickness and Margins inside LayoutDocumentFloatingWindowControl. + if( fwHeight == 0.0 ) + fwHeight = parentPaneAsWithActualSize.ActualHeight + 10; //10 includes BorderThickness and Margins inside LayoutDocumentFloatingWindowControl. + + LayoutFloatingWindow fw; + LayoutFloatingWindowControl fwc; + if( contentModel is LayoutAnchorable ) + { + var anchorableContent = contentModel as LayoutAnchorable; + fw = new LayoutAnchorableFloatingWindow() + { + RootPanel = new LayoutAnchorablePaneGroup( + new LayoutAnchorablePane( anchorableContent ) + { + DockWidth = parentPaneAsPositionableElement.DockWidth, + DockHeight = parentPaneAsPositionableElement.DockHeight, + DockMinHeight = parentPaneAsPositionableElement.DockMinHeight, + DockMinWidth = parentPaneAsPositionableElement.DockMinWidth, + FloatingLeft = parentPaneAsPositionableElement.FloatingLeft, + FloatingTop = parentPaneAsPositionableElement.FloatingTop, + FloatingWidth = parentPaneAsPositionableElement.FloatingWidth, + FloatingHeight = parentPaneAsPositionableElement.FloatingHeight, + } ) + }; + + Layout.FloatingWindows.Add( fw ); + + fwc = new LayoutAnchorableFloatingWindowControl( + fw as LayoutAnchorableFloatingWindow, isContentImmutable ) + { + Width = fwWidth, + Height = fwHeight, + Left = contentModel.FloatingLeft, + Top = contentModel.FloatingTop + }; + } + else + { + var anchorableDocument = contentModel as LayoutDocument; + fw = new LayoutDocumentFloatingWindow() + { + RootDocument = anchorableDocument + }; + + Layout.FloatingWindows.Add( fw ); + + fwc = new LayoutDocumentFloatingWindowControl( + fw as LayoutDocumentFloatingWindow, isContentImmutable ) + { + Width = fwWidth, + Height = fwHeight, + Left = contentModel.FloatingLeft, + Top = contentModel.FloatingTop + }; + } + + + //fwc.Owner = Window.GetWindow(this); + //fwc.SetParentToMainWindowOf(this); + + + _fwList.Add( fwc ); + + Layout.CollectGarbage(); + + UpdateLayout(); + + return fwc; + } + #endregion #region Events diff --git a/source/Components/Xceed.Wpf.AvalonDock/Layout/Extentions.cs b/source/Components/Xceed.Wpf.AvalonDock/Layout/Extentions.cs index 09c3469a..dcb2f3af 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Layout/Extentions.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Layout/Extentions.cs @@ -85,41 +85,34 @@ public static bool IsOfType( this ILayoutContainer container ) return container is T || container is S; } - public static AnchorSide GetSide(this ILayoutElement element) + public static AnchorSide GetSide( this ILayoutElement element ) + { + var parentContainer = element.Parent as ILayoutOrientableGroup; + if( parentContainer != null ) + { + var layoutPanel = parentContainer as LayoutPanel; + if( layoutPanel == null ) { - var parentContainer = element.Parent as ILayoutOrientableGroup; - if (parentContainer != null) - { - if (!parentContainer.ContainsChildOfType()) - return GetSide(parentContainer); - - foreach (var childElement in parentContainer.Children) - { - if (childElement == element || - childElement.Descendents().Contains(element)) - return parentContainer.Orientation == System.Windows.Controls.Orientation.Horizontal ? - AnchorSide.Left : AnchorSide.Top; - - var childElementAsContainer = childElement as ILayoutContainer; - if (childElementAsContainer != null && - (childElementAsContainer.IsOfType() || - childElementAsContainer.ContainsChildOfType())) - { - return parentContainer.Orientation == System.Windows.Controls.Orientation.Horizontal ? - AnchorSide.Right : AnchorSide.Bottom; - } - } - } - - Debug.Fail("Unable to find the side for an element, possible layout problem!"); - return AnchorSide.Right; + layoutPanel = parentContainer.FindParent(); } - #endregion + if( (layoutPanel != null) && ( layoutPanel.Children.Count > 0 ) ) + { + if( layoutPanel.Orientation == System.Windows.Controls.Orientation.Horizontal ) + return ( layoutPanel.Children[ 0 ].Equals(element) || layoutPanel.Children[ 0 ].Descendents().Contains( element ) ) ? AnchorSide.Left : AnchorSide.Right; + return ( layoutPanel.Children[ 0 ].Equals( element ) || layoutPanel.Children[ 0 ].Descendents().Contains( element ) ) ? AnchorSide.Top : AnchorSide.Bottom; + } + } + + Debug.Fail( "Unable to find the side for an element, possible layout problem!" ); + return AnchorSide.Right; + } + + #endregion - #region Internal Methods + #region Internal Methods - internal static void KeepInsideNearestMonitor( this ILayoutElementForFloatingWindow paneInsideFloatingWindow ) + internal static void KeepInsideNearestMonitor( this ILayoutElementForFloatingWindow paneInsideFloatingWindow ) { Win32Helper.RECT r = new Win32Helper.RECT(); r.Left = ( int )paneInsideFloatingWindow.FloatingLeft; diff --git a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutAnchorable.cs b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutAnchorable.cs index 66362faa..ebfddce8 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutAnchorable.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutAnchorable.cs @@ -35,6 +35,7 @@ public class LayoutAnchorable : LayoutContent private double _autohideMinHeight = 100.0; private bool _canHide = true; private bool _canAutoHide = true; + private bool _canDockAsTabbedDocument = true; private bool _canCloseValueBeforeInternalSet; #endregion @@ -181,6 +182,26 @@ public bool CanAutoHide #endregion + #region CanDockAsTabbedDocument + + public bool CanDockAsTabbedDocument + { + get + { + return _canDockAsTabbedDocument; + } + set + { + if( _canDockAsTabbedDocument != value ) + { + _canDockAsTabbedDocument = value; + RaisePropertyChanged( "CanDockAsTabbedDocument" ); + } + } + } + + #endregion + #region IsAutoHidden /// @@ -326,6 +347,8 @@ public override void ReadXml( System.Xml.XmlReader reader ) AutoHideMinWidth = double.Parse( reader.Value, CultureInfo.InvariantCulture ); if( reader.MoveToAttribute( "AutoHideMinHeight" ) ) AutoHideMinHeight = double.Parse( reader.Value, CultureInfo.InvariantCulture ); + if( reader.MoveToAttribute( "CanDockAsTabbedDocument" ) ) + CanDockAsTabbedDocument = bool.Parse( reader.Value ); base.ReadXml( reader ); } @@ -344,7 +367,8 @@ public override void WriteXml( System.Xml.XmlWriter writer ) writer.WriteAttributeString( "AutoHideMinWidth", AutoHideMinWidth.ToString( CultureInfo.InvariantCulture ) ); if( AutoHideMinHeight != 25.0 ) writer.WriteAttributeString( "AutoHideMinHeight", AutoHideMinHeight.ToString( CultureInfo.InvariantCulture ) ); - + if( !CanDockAsTabbedDocument ) + writer.WriteAttributeString( "CanDockAsTabbedDocument", CanDockAsTabbedDocument.ToString( CultureInfo.InvariantCulture ) ); base.WriteXml( writer ); } diff --git a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs index e9c7c19e..0cf07850 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs @@ -22,7 +22,6 @@ This program is provided to you under the terms of the Microsoft Public using System.Globalization; using System.Windows.Media; using System.ComponentModel; -using Xceed.Wpf.AvalonDock.Controls; namespace Xceed.Wpf.AvalonDock.Layout { @@ -144,7 +143,6 @@ public bool IsSelected parentSelector.SelectedContentIndex = _isSelected ? parentSelector.IndexOf( this ) : -1; OnIsSelectedChanged( oldValue, value ); RaisePropertyChanged( "IsSelected" ); - LayoutAnchorableTabItem.CancelMouseLeave(); } } } diff --git a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutDocument.cs b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutDocument.cs index 3f32dfd1..1fff5565 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutDocument.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutDocument.cs @@ -25,6 +25,27 @@ public class LayoutDocument : LayoutContent { #region Properties + #region CanMove + + internal bool _canMove = true; + public bool CanMove + { + get + { + return _canMove; + } + set + { + if( _canMove != value ) + { + _canMove = value; + RaisePropertyChanged( "CanMove" ); + } + } + } + + #endregion + #region IsVisible public bool IsVisible @@ -74,12 +95,16 @@ public override void WriteXml( System.Xml.XmlWriter writer ) if( !string.IsNullOrWhiteSpace( this.Description ) ) writer.WriteAttributeString( "Description", this.Description ); + if( !CanMove ) + writer.WriteAttributeString( "CanMove", CanMove.ToString() ); } public override void ReadXml( System.Xml.XmlReader reader ) { if( reader.MoveToAttribute( "Description" ) ) this.Description = reader.Value; + if( reader.MoveToAttribute( "CanMove" ) ) + CanMove = bool.Parse( reader.Value ); base.ReadXml( reader ); } diff --git a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutPositionableGroup.cs b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutPositionableGroup.cs index 149598b7..373ab50e 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutPositionableGroup.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutPositionableGroup.cs @@ -340,7 +340,7 @@ public override void WriteXml( System.Xml.XmlWriter writer ) writer.WriteAttributeString( "DockHeight", _gridLengthConverter.ConvertToInvariantString( DockHeight ) ); if( DockMinWidth != 25.0 ) - writer.WriteAttributeString( "DockMinWidth", DockMinWidth.ToString( CultureInfo.InvariantCulture ) ); + writer.WriteAttributeString( "DocMinWidth", DockMinWidth.ToString( CultureInfo.InvariantCulture ) ); if( DockMinHeight != 25.0 ) writer.WriteAttributeString( "DockMinHeight", DockMinHeight.ToString( CultureInfo.InvariantCulture ) ); @@ -366,9 +366,9 @@ public override void ReadXml( System.Xml.XmlReader reader ) if( reader.MoveToAttribute( "DockHeight" ) ) _dockHeight = ( GridLength )_gridLengthConverter.ConvertFromInvariantString( reader.Value ); - if( reader.MoveToAttribute( "DockMinWidth" ) ) + if( reader.MoveToAttribute( "DocMinWidth" ) ) _dockMinWidth = double.Parse( reader.Value, CultureInfo.InvariantCulture ); - if( reader.MoveToAttribute( "DockMinHeight" ) ) + if( reader.MoveToAttribute( "DocMinHeight" ) ) _dockMinHeight = double.Parse( reader.Value, CultureInfo.InvariantCulture ); if( reader.MoveToAttribute( "FloatingWidth" ) ) diff --git a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutRoot.cs b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutRoot.cs index 98fc4d99..78b39e25 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutRoot.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Layout/LayoutRoot.cs @@ -777,18 +777,13 @@ internal void OnLayoutElementRemoved( LayoutElement element ) private void _floatingWindows_CollectionChanged( object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e ) { - bool bNotifyChildren = false; - if( e.OldItems != null && ( e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove || e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Replace ) ) { foreach( LayoutFloatingWindow element in e.OldItems ) { if( element.Parent == this ) - { element.Parent = null; - bNotifyChildren = true; - } } } @@ -796,37 +791,12 @@ private void _floatingWindows_CollectionChanged( object sender, System.Collectio e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Replace ) ) { foreach( LayoutFloatingWindow element in e.NewItems ) - { element.Parent = this; - bNotifyChildren = true; - } - } - - // descendants of LayoutElement notify when their Children and ChildrenCount properties change - // https://github.com/xceedsoftware/wpftoolkit/issues/1313 - // - if (bNotifyChildren == true && - (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove || - e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add - )) - { - RaisePropertyChanged("Children"); - RaisePropertyChanged("ChildrenCount"); - } - else - { - if (bNotifyChildren == true && - e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Replace ) - { - RaisePropertyChanged("Children"); - } } } private void _hiddenAnchorables_CollectionChanged( object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e ) { - bool bNotifyChildren = false; - if( e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove || e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Replace ) { @@ -835,10 +805,7 @@ private void _hiddenAnchorables_CollectionChanged( object sender, System.Collect foreach( LayoutAnchorable element in e.OldItems ) { if( element.Parent == this ) - { element.Parent = null; - bNotifyChildren = true; - } } } } @@ -854,34 +821,15 @@ private void _hiddenAnchorables_CollectionChanged( object sender, System.Collect { if( element.Parent != null ) element.Parent.RemoveChild( element ); - element.Parent = this; - bNotifyChildren = true; } } } } - // descendants of LayoutElement notify when their Children and ChildrenCount properties change - // https://github.com/xceedsoftware/wpftoolkit/issues/1313 - // - if (bNotifyChildren == true && - (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove || - e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add - )) - { - RaisePropertyChanged("Children"); - RaisePropertyChanged("ChildrenCount"); - } - else - { - if (bNotifyChildren == true && - e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Replace ) - { - RaisePropertyChanged("Children"); - } - } + + } private void InternalSetActiveContent( LayoutContent currentValue, LayoutContent newActiveContent ) diff --git a/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.cs-CZ.resx b/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.cs-CZ.resx deleted file mode 100644 index 6566dd82..00000000 --- a/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.cs-CZ.resx +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Skrývat automaticky - - - Skrývat automaticky - - - Skrýt - - - Pozice okna - - - Dokovat - - - Dokovat jako záložku - - - Změnit na plovoucí - - - Skrýt - - - Přepnout připnutí - - - Zavřít - - - Zavřít vše - - - Zavřít vše kromě této záložky - - - Pozice okna - - - Dokovat jako záložku - - - Změnit na plovoucí - - - Přesunout do následující skupiny záložek - - - Přesunout do předchozí skupiny záložek - - - Nová horizontální skupina záložek - - - Nová vertikální skupina záložek - - - Maximalizovat - - - Obnovit - - \ No newline at end of file diff --git a/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.nl-BE.Designer.cs b/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.nl-BE.Designer.cs deleted file mode 100644 index e69de29b..00000000 diff --git a/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.nl-BE.resx b/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.nl-BE.resx deleted file mode 100644 index 03f82cbc..00000000 --- a/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.nl-BE.resx +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Automatisch verbergen - - - Automatisch verbergen - - - Verbergen - - - Venster - - - Dokken - - - Dokken als tabblad - - - Laten zweven - - - Verbergen - - - Schakel pin - - - Sluiten - - - Alles sluiten - - - Alles behalve deze sluiten - - - Laten zweven - - - Dokken als tabblad - - - Laten zweven - - - Naar volgende groep tabbladen - - - Naar vorige groep tabbladen - - - Nieuwe horizontale groep tabbladen - - - Nieuwe verticale groep tabbladen - - - Maximaliseren - - - Terugzetten - - \ No newline at end of file diff --git a/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.zh-Hans.Designer.cs b/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.zh-Hans.Designer.cs index e69de29b..6893b2a2 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.zh-Hans.Designer.cs +++ b/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.zh-Hans.Designer.cs @@ -0,0 +1,16 @@ +/************************************************************************************* + + Extended WPF Toolkit + + Copyright (C) 2007-2013 Xceed Software Inc. + + This program is provided to you under the terms of the Microsoft Public + License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license + + For more features, controls, and fast professional support, + pick up the Plus Edition at http://xceed.com/wpf_toolkit + + Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids + + ***********************************************************************************/ + diff --git a/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.zh-Hans.resx b/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.zh-Hans.resx index e1c7d815..3d292c23 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.zh-Hans.resx +++ b/source/Components/Xceed.Wpf.AvalonDock/Properties/Resources.zh-Hans.resx @@ -142,16 +142,16 @@ 隐藏 - 切换固定状态 + 切換引腳狀態 关闭 - 关闭所有 + 關閉所有 - 除此之外全部关闭 + 留此,关闭其他 窗口位置 @@ -178,6 +178,6 @@ 最大化 - 还原 + 恢复 \ No newline at end of file diff --git a/source/Components/Xceed.Wpf.AvalonDock/Themes/generic.xaml b/source/Components/Xceed.Wpf.AvalonDock/Themes/generic.xaml index 95cc3af1..7895becc 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Themes/generic.xaml +++ b/source/Components/Xceed.Wpf.AvalonDock/Themes/generic.xaml @@ -441,7 +441,8 @@ - + @@ -789,15 +790,19 @@ Grid.Row="1" /> + Grid.Row="0" + Grid.RowSpan="3" /> + Grid.Row="0" + Grid.RowSpan="3" /> + @@ -833,7 +839,7 @@ - @@ -950,7 +956,7 @@ + Content="{Binding LayoutItem.View.Content, RelativeSource={RelativeSource TemplatedParent}}" /> + - + @@ -1106,10 +1112,10 @@ BorderBrush="{TemplateBinding BorderBrush}"> - + - + @@ -1242,9 +1248,9 @@ BorderBrush="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"> - + - + diff --git a/source/Components/Xceed.Wpf.AvalonDock/Xceed.Wpf.AvalonDock.csproj b/source/Components/Xceed.Wpf.AvalonDock/Xceed.Wpf.AvalonDock.csproj index b9ccde82..a76c670e 100644 --- a/source/Components/Xceed.Wpf.AvalonDock/Xceed.Wpf.AvalonDock.csproj +++ b/source/Components/Xceed.Wpf.AvalonDock/Xceed.Wpf.AvalonDock.csproj @@ -229,11 +229,6 @@ True Resources.it.resx - - True - True - Resources.nl-BE.resx - True True @@ -264,18 +259,11 @@ - - Designer - PublicResXFileCodeGenerator Resources.hu.Designer.cs Designer - - PublicResXFileCodeGenerator - Resources.nl-BE.Designer.cs - PublicResXFileCodeGenerator Resources.Designer.cs