From 9aefdce97daabab2a05cb433d8a99cbf2dca5187 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Wed, 8 Jan 2020 00:05:24 +0800 Subject: [PATCH] fixed #272 --- .../Controls/TabControl/TabControl.cs | 36 ++++++++++--------- .../Controls/TabControl/TabItem.cs | 4 +-- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs b/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs index bcef77e1..d656468f 100644 --- a/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs +++ b/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs @@ -224,11 +224,7 @@ namespace HandyControl.Controls return; } - if (!IsTabFillEnabled) - { - _itemShowCount = (int)(ActualWidth / TabItemWidth); - _buttonOverflow?.Show(ShowOverflowButton && Items.Count > 0 && Items.Count >= _itemShowCount); - } + UpdateOverflowButton(); if (IsInternalAction) { @@ -292,15 +288,6 @@ namespace HandyControl.Controls if (_buttonOverflow != null) { - if (ItemsSource != null) - { - Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); - } - - var size = DesiredSize; - _itemShowCount = (int)(size.Width / TabItemWidth); - _buttonOverflow.Show(ShowOverflowButton && Items.Count > 0 && Items.Count >= _itemShowCount); - var menu = new ContextMenu { Placement = PlacementMode.Bottom, @@ -312,6 +299,21 @@ namespace HandyControl.Controls } } + protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo) + { + base.OnRenderSizeChanged(sizeInfo); + UpdateOverflowButton(); + } + + private void UpdateOverflowButton() + { + if (!IsTabFillEnabled) + { + _itemShowCount = (int)(ActualWidth / TabItemWidth); + _buttonOverflow?.Show(ShowOverflowButton && Items.Count > 0 && Items.Count >= _itemShowCount); + } + } + private void Menu_Closed(object sender, RoutedEventArgs e) => _buttonOverflow.IsChecked = false; private void ButtonScrollRight_Click(object sender, RoutedEventArgs e) => @@ -346,7 +348,7 @@ namespace HandyControl.Controls { _buttonOverflow.IsChecked = false; - var list = GetActuaList(); + var list = GetActualList(); if (list == null) return; var actualItem = ItemContainerGenerator.ItemFromContainer(item); @@ -391,7 +393,7 @@ namespace HandyControl.Controls { var actualItem = currentItem != null ? ItemContainerGenerator.ItemFromContainer(currentItem) : null; - var list = GetActuaList(); + var list = GetActualList(); if (list == null) return; IsInternalAction = true; @@ -418,7 +420,7 @@ namespace HandyControl.Controls SetCurrentValue(SelectedIndexProperty, Items.Count == 0 ? -1 : 0); } - internal IList GetActuaList() + internal IList GetActualList() { IList list; if (ItemsSource != null) diff --git a/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs b/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs index ceddf142..c001fb30 100644 --- a/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs @@ -285,7 +285,7 @@ namespace HandyControl.Controls parent.IsInternalAction = true; RaiseEvent(new RoutedEventArgs(ClosedEvent, item)); - var list = parent.GetActuaList(); + var list = parent.GetActualList(); list?.Remove(item); } @@ -392,7 +392,7 @@ namespace HandyControl.Controls RenderTransform = new TranslateTransform(resultX, 0); if (index == -1) return; - var list = parent.GetActuaList(); + var list = parent.GetActualList(); if (list == null) return; var item = parent.ItemContainerGenerator.ItemFromContainer(this);