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/Controls/LayoutGridControl.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutGridControl.cs index 4e5303ca..c96e26dd 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutGridControl.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutGridControl.cs @@ -388,6 +388,10 @@ namespace Xceed.Wpf.AvalonDock.Controls { prevChildModel.DockWidth = new GridLength(prevChildModel.DockWidth.Value * (prevChildActualSize.Width + delta) / prevChildActualSize.Width, GridUnitType.Star); } + else if (prevChildModel.DockWidth.IsAuto) + { + prevChildModel.DockWidth = new GridLength(prevChildActualSize.Width + delta, GridUnitType.Pixel); + } else { prevChildModel.DockWidth = new GridLength(prevChildModel.DockWidth.Value + delta, GridUnitType.Pixel); @@ -397,6 +401,10 @@ namespace Xceed.Wpf.AvalonDock.Controls { nextChildModel.DockWidth = new GridLength(nextChildModel.DockWidth.Value * (nextChildActualSize.Width - delta) / nextChildActualSize.Width, GridUnitType.Star); } + else if (nextChildModel.DockWidth.IsAuto) + { + nextChildModel.DockWidth = new GridLength(nextChildActualSize.Width - delta, GridUnitType.Pixel); + } else { nextChildModel.DockWidth = new GridLength(nextChildModel.DockWidth.Value - delta, GridUnitType.Pixel); @@ -408,6 +416,10 @@ namespace Xceed.Wpf.AvalonDock.Controls { prevChildModel.DockHeight = new GridLength(prevChildModel.DockHeight.Value * (prevChildActualSize.Height + delta) / prevChildActualSize.Height, GridUnitType.Star); } + else if (prevChildModel.DockHeight.IsAuto) + { + prevChildModel.DockHeight = new GridLength(prevChildActualSize.Height + delta, GridUnitType.Pixel); + } else { prevChildModel.DockHeight = new GridLength(prevChildModel.DockHeight.Value + delta, GridUnitType.Pixel); @@ -417,6 +429,10 @@ namespace Xceed.Wpf.AvalonDock.Controls { nextChildModel.DockHeight = new GridLength(nextChildModel.DockHeight.Value * (nextChildActualSize.Height - delta) / nextChildActualSize.Height, GridUnitType.Star); } + else if (nextChildModel.DockHeight.IsAuto) + { + nextChildModel.DockHeight = new GridLength(nextChildActualSize.Height - delta, GridUnitType.Pixel); + } else { nextChildModel.DockHeight = new GridLength(nextChildModel.DockHeight.Value - delta, GridUnitType.Pixel); diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs index d7b3eaba..e0676604 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutContent.cs @@ -84,25 +84,31 @@ namespace Xceed.Wpf.AvalonDock.Layout #region ContentId - private string _contentId = null; + //Added to make ContentId bindable + public static DependencyProperty ContentIdProperty = + DependencyProperty.Register(nameof(ContentId), + typeof(string), typeof(LayoutContent), new FrameworkPropertyMetadata(null, (s, e) => + { + (s as LayoutContent)?.RaisePropertyChanged(nameof(ContentId)); + })); + public string ContentId { - get + get { - if (_contentId == null) - { + if (GetValue(ContentIdProperty) == null) + { var contentAsControl = _content as FrameworkElement; if (contentAsControl != null && !string.IsNullOrWhiteSpace(contentAsControl.Name)) return contentAsControl.Name; } - return _contentId; + return (string)GetValue(ContentIdProperty); } set { - if (_contentId != value) + if (!String.Equals(GetValue(ContentIdProperty) as string, value)) { - _contentId = value; - RaisePropertyChanged("ContentId"); + SetValue(ContentIdProperty, value); } } } @@ -127,6 +133,7 @@ namespace Xceed.Wpf.AvalonDock.Layout parentSelector.SelectedContentIndex = _isSelected ? parentSelector.IndexOf(this) : -1; OnIsSelectedChanged(oldValue, value); RaisePropertyChanged("IsSelected"); + Controls.LayoutAnchorableTabItem.CancelNextMouseLeave(); } } } diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/MaskedTextBox/Implementation/MaskedTextBox.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/MaskedTextBox/Implementation/MaskedTextBox.cs index 4d68eedb..43e9d9d7 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/MaskedTextBox/Implementation/MaskedTextBox.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/MaskedTextBox/Implementation/MaskedTextBox.cs @@ -1441,7 +1441,7 @@ namespace Xceed.Wpf.Toolkit internal override bool GetIsEditTextEmpty() { - return ( this.MaskedTextProvider.AssignedEditPositionCount == 0 ); + return MaskedTextProvider != null && (MaskedTextProvider.AssignedEditPositionCount == 0 ); } #endregion INTERNAL PROPERTIES diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/RichTextBoxFormatBar/RichTextBoxFormatBarManager.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/RichTextBoxFormatBar/RichTextBoxFormatBarManager.cs index 5b8a9752..53a6c0f0 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/RichTextBoxFormatBar/RichTextBoxFormatBarManager.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/RichTextBoxFormatBar/RichTextBoxFormatBarManager.cs @@ -210,13 +210,25 @@ namespace Xceed.Wpf.Toolkit //top if( top < 0 ) { - top = mousePosition.Y + 10; + top = Math.Max( mousePosition.Y + 10, 5 ); + } + + // bottom + if ( top + adorningEditor.ActualHeight > _richTextBox.ActualHeight - 20 ) + { + top = _richTextBox.ActualHeight - adorningEditor.ActualHeight - 20; + } + + // left boundary + if ( left < 0 ) + { + left = 5; } //right boundary if( left + adorningEditor.ActualWidth > _richTextBox.ActualWidth - 20 ) { - left = left - ( adorningEditor.ActualWidth - ( _richTextBox.ActualWidth - left ) ); + left = _richTextBox.ActualWidth - adorningEditor.ActualWidth - 20; } _adorner.SetOffsets( left, top );