Tho*_*nHa 5 wpf visibility tabcontrol tabitem
我在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>
Run Code Online (Sandbox Code Playgroud)
如果没有数据表包含任何行,则不应显示任何TabItem.(我知道在这种情况下我可以隐藏整个TabControl,但这不是重点.)
实际上,尽管TabItem被折叠,但仍会显示标签项"Header 1"的内容!TabItem的标题本身是折叠的,TabItems边框包含其内容和内容本身.
编辑/添加:使用此代码可以轻松复制(使用折叠或隐藏的注释没有任何区别:
<TabControl>
<TabItem Header="Test 1" Visibility="Hidden">
<Label>Test1</Label>
</TabItem>
<TabItem Header="Test 2" Visibility="Hidden">
<Label>Test2</Label>
</TabItem>
</TabControl>
Run Code Online (Sandbox Code Playgroud)
那么这里有什么问题?任何帮助/提示表示赞赏!
好的,所以你在这里发现了一个真正的问题......我在网上看了一下,发现了几个与此相关的帖子.有人说这是一个错误,而另一些人则认为这是设计行为.不知道哪个,虽然它似乎更像是一个bug而不是一个功能.
无论哪种方式,您都想知道如何处理问题...有几种解决方案.一种是只设置TabItem.Content到null时候你想隐藏的标签,另一个是另一个涉及添加一个空的TabItem和隐藏(所以它的显示内容为空),之前选择该项目.
您可以将TabItem.IsVisibleChanged事件附加到事件,以便Visibility在更改属性时收到通知:
public void TabItemIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
// Hide TabItem.Content here
}
Run Code Online (Sandbox Code Playgroud)
以下是相关帖子的一些链接:
TabControl/TabItem的内容可见性中的错误?
WPF TabControl - 当TabItem可见性更改时选择不同的选项卡
是否存在此tabcontrol/tabitem错误的解决方法