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;
};
}