From 7488d6d3679829b67a7fac394340d629f667ab15 Mon Sep 17 00:00:00 2001 From: John Stewien Date: Thu, 17 Aug 2017 17:07:21 +0930 Subject: [PATCH] AvalonDock fixed tabs undocking when changing tabs to a different sized tab, related to AutoSize setting. --- .../Controls/LayoutAnchorableTabItem.cs | 26 ++++++++++++++++--- .../Layout/LayoutContent.cs | 1 + 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableTabItem.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableTabItem.cs index ee6695d7..856260cf 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableTabItem.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutAnchorableTabItem.cs @@ -116,8 +116,11 @@ namespace Xceed.Wpf.AvalonDock.Controls #endregion - bool _isMouseDown = false; - static LayoutAnchorableTabItem _draggingItem = null; + private bool _isMouseDown = false; + private static LayoutAnchorableTabItem _draggingItem = null; + // There's an issue with panes resizing when selecting another tab, causing a + // mouse leave event to make the tab undock. This fixes that. + private static bool _cancelNextMouseLeave = false; internal static bool IsDraggingItem() { @@ -132,6 +135,10 @@ namespace Xceed.Wpf.AvalonDock.Controls { _draggingItem = null; } + internal static void CancelNextMouseLeave() + { + _cancelNextMouseLeave = true; + } protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e) { @@ -150,6 +157,11 @@ namespace Xceed.Wpf.AvalonDock.Controls _isMouseDown = false; _draggingItem = null; } + else + { + _cancelNextMouseLeave = false; + } + } protected override void OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e) @@ -167,10 +179,18 @@ namespace Xceed.Wpf.AvalonDock.Controls if (_isMouseDown && e.LeftButton == MouseButtonState.Pressed) { - _draggingItem = this; + if (!_cancelNextMouseLeave) + { + _draggingItem = this; + } + else + { + _draggingItem = null; + } } _isMouseDown = false; + _cancelNextMouseLeave = false; } protected override void OnMouseEnter(MouseEventArgs e) diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs index d7b3eaba..b65cf913 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs @@ -127,6 +127,7 @@ namespace Xceed.Wpf.AvalonDock.Layout parentSelector.SelectedContentIndex = _isSelected ? parentSelector.IndexOf(this) : -1; OnIsSelectedChanged(oldValue, value); RaisePropertyChanged("IsSelected"); + Controls.LayoutAnchorableTabItem.CancelNextMouseLeave(); } } }