wpf - wpf TabControl: 所有TabItems都已经折叠,但 1st TabItem仍然可见

  显示原文与译文双语对照的内容
79 2

我在TabControl上有一个相当奇怪的行为,它的TabItems都是折叠的:第一个TabItem的内容仍然可见,( 但标题是) 。

TabControl及其TabItems的设置如下所示:

<TabControl>
 <TabItem Header="Data 1"
 Visibility="{Binding Path=DataTable1.HasRows, 
 Converter={StaticResource BoolToVisibility}}">
 <UI:ShowData DataContext="{Binding Path=DataTable1}"/>
 </TabItem>
 <TabItem Header="Data 2"
 Visibility="{Binding Path=DataTable2.HasRows, 
 Converter={StaticResource BoolToVisibility}}">
 <UI:ShowData DataContext="{Binding Path=DataTable2}"/>
 </TabItem>
</TabControl>

如果没有任何数据表包含任何行,则不应显示任何 TabItems 。( 我知道我可以以在这种情况下隐藏整个 rtc,但这并不是这里的关键。)

实际上,选项卡项"标题 1"的内容将显示,尽管已经折叠了 TabItem !tabitem的头是折叠的,包含它的内容和内容本身的TabItems边框将显示。

编辑/添加:使用这里代码很容易复制( 请注意使用折叠或者隐藏不会产生任何差异:

<TabControl>
 <TabItem Header="Test 1" Visibility="Hidden">
 <Label>Test1</Label>
 </TabItem>
 <TabItem Header="Test 2" Visibility="Hidden">
 <Label>Test2</Label>
 </TabItem>
</TabControl>

那么这里有什么错误任何帮助/提示都值得感激? !

时间:原作者:0个回答

61 2

好吧,你发现了一个真正的问题。我上网查看了一下,发现一些与这里相关的帖子。有人说这是一个 Bug,而其他人则认为它是设计的行为。不知道哪一个,尽管它似乎是一个比特性更多的Bug 。

不管怎样你都想知道如何处理这个问题。。solutions有几种解决方案。只要在隐藏选项卡时将 TabItem.Content 设置为 null,另一个则包括添加空 TabItem 并在隐藏( 所以它是空的内容) 之前选择该项。

在更改 Visibility 属性时,可以将处理程序附加到 TabItem.IsVisibleChanged 事件 notified通知:

public void TabItemIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
//Hide TabItem.Content here
}

以下是相关帖子的链接:

在 tabcontrol/tabitem`s内容可见性中的 Bug
WPF在TabItem可见性更改选择不同的选项卡。
是否存在这里 tabcontrol/tabitem Bug的解决方案

原作者:
99 5

我更喜欢的另一种解决方案是:将 TabItem 及其内容的可见性绑定到同一属性( 使用 BooleanToVisibilityConverter ) 。下面是一个简单的例子:

<UserControl.Resources> 
 <BooleanToVisibilityConverter x:Key="boolToVis"/>
</UserControl.Resources>
<Grid>
 <TabControl>
 <TabItem Header="TabItem 1" Visibility="{Binding Item1Visibility, Converter={StaticResource boolToVis}}">
 <Label Content="Content 1" Visibility="{Binding Item1Visibility, Converter={StaticResource boolToVis}}"/>
 </TabItem>
 <TabItem Header="TabItem 2" Visibility="{Binding Item1Visibility, Converter={StaticResource boolToVis}}">
 <Label Content="Content 2" Visibility="{Binding Item1Visibility, Converter={StaticResource boolToVis}}"/>
 </TabItem>
 </TabControl>
</Grid>
原作者:
...