From 37c9f3e3afd41ec5fe4fc34b3c420e23642be0bd Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Sun, 11 Nov 2018 21:46:42 +0800 Subject: [PATCH] fixed a bug of tabcontrol --- .../Controls/TabControl/TabControl.cs | 1 + HandyControl/Controls/TabControl/TabItem.cs | 32 +++++++------------ HandyControl/Controls/TabControl/TabPanel.cs | 4 +++ 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/HandyControl/Controls/TabControl/TabControl.cs b/HandyControl/Controls/TabControl/TabControl.cs index 99e79d94..a04ad95d 100644 --- a/HandyControl/Controls/TabControl/TabControl.cs +++ b/HandyControl/Controls/TabControl/TabControl.cs @@ -155,6 +155,7 @@ namespace HandyControl.Controls { item.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); item.IsSelected = true; + item.TabPanel = _headerPanel; } } IsInternalAction = false; diff --git a/HandyControl/Controls/TabControl/TabItem.cs b/HandyControl/Controls/TabControl/TabItem.cs index f25ff7b0..80593e88 100644 --- a/HandyControl/Controls/TabControl/TabItem.cs +++ b/HandyControl/Controls/TabControl/TabItem.cs @@ -91,7 +91,7 @@ namespace HandyControl.Controls /// /// 标签容器 /// - private TabPanel _tabPanel; + internal TabPanel TabPanel { get; set; } /// /// 当前编号 @@ -108,8 +108,6 @@ namespace HandyControl.Controls } } - private bool _isLoaded; - /// /// 更新选项卡横向偏移 /// @@ -117,23 +115,17 @@ namespace HandyControl.Controls private void UpdateItemOffsetX(int oldIndex) { if (!_isDragging) return; - var moveItem = _tabPanel.ItemDic[CurrentIndex]; + var moveItem = TabPanel.ItemDic[CurrentIndex]; moveItem.CurrentIndex -= CurrentIndex - oldIndex; var offsetX = moveItem.TargetOffsetX; var resultX = offsetX + (oldIndex - CurrentIndex) * ItemWidth; - _tabPanel.ItemDic[CurrentIndex] = this; - _tabPanel.ItemDic[moveItem.CurrentIndex] = moveItem; + TabPanel.ItemDic[CurrentIndex] = this; + TabPanel.ItemDic[moveItem.CurrentIndex] = moveItem; moveItem.CreateAnimation(offsetX, resultX); } public TabItem() { - Loaded += (s, e) => - { - if (_isLoaded) return; - _tabPanel = VisualParent as TabPanel; - _isLoaded = true; - }; CommandBindings.Add(new CommandBinding(ControlCommands.Close, Close)); CommandBindings.Add(new CommandBinding(ControlCommands.CloseAll, (s, e) => { @@ -172,11 +164,11 @@ namespace HandyControl.Controls { if (TabControlParent.IsEnableAnimation) { - _tabPanel.ClearValue(TabPanel.FluidMoveDurationProperty); + TabPanel.ClearValue(TabPanel.FluidMoveDurationProperty); } else { - _tabPanel.FluidMoveDuration = new Duration(TimeSpan.FromSeconds(0)); + TabPanel.FluidMoveDuration = new Duration(TimeSpan.FromSeconds(0)); } TabControlParent.IsInternalAction = true; TabControlParent.Items.Remove(this); @@ -187,7 +179,7 @@ namespace HandyControl.Controls base.OnMouseLeftButtonDown(e); if (TabControlParent.IsDraggable && !ItemIsDragging && !_isDragging) { - _tabPanel.FluidMoveDuration = new Duration(TimeSpan.FromSeconds(0)); + TabPanel.FluidMoveDuration = new Duration(TimeSpan.FromSeconds(0)); _mouseDownOffsetX = RenderTransform.Value.OffsetX; var mx = TranslatePoint(new Point(), TabControlParent).X; _mouseDownIndex = CalLocationIndex(mx); @@ -259,15 +251,15 @@ namespace HandyControl.Controls RenderTransform = new TranslateTransform(resultX, 0); if (index == -1) return; var parent = TabControlParent; - _tabPanel.CanUpdate = false; + TabPanel.CanUpdate = false; parent.IsInternalAction = true; parent.Items.Remove(this); parent.IsInternalAction = true; parent.Items.Insert(index, this); - _tabPanel.CanUpdate = true; - _tabPanel.ForceUpdate = true; - _tabPanel.Measure(new Size(_tabPanel.DesiredSize.Width, ActualHeight)); - _tabPanel.ForceUpdate = false; + TabPanel.CanUpdate = true; + TabPanel.ForceUpdate = true; + TabPanel.Measure(new Size(TabPanel.DesiredSize.Width, ActualHeight)); + TabPanel.ForceUpdate = false; Focus(); IsSelected = true; } diff --git a/HandyControl/Controls/TabControl/TabPanel.cs b/HandyControl/Controls/TabControl/TabPanel.cs index 39fd164b..7cd3ad01 100644 --- a/HandyControl/Controls/TabControl/TabPanel.cs +++ b/HandyControl/Controls/TabControl/TabPanel.cs @@ -164,6 +164,10 @@ namespace HandyControl.Controls ForceUpdate = true; Measure(new Size(DesiredSize.Width, ActualHeight)); ForceUpdate = false; + foreach (var item in ItemDic.Values) + { + item.TabPanel = this; + } _isLoaded = true; }; }