我有一个TabControl,它显示用户可以在列表中选择的对象的默认信息。 不幸的是,并非所有的TabItem都适用于所有类型的对象。这就是为什么我决定在这种情况下使用DataTriggers来隐藏其中的一些原因的原因。但是,在测试时,我注意到当一个TabItem设置为折叠时已经被选中时,只有标题消失了,但是TabItems的内容仍然可见。
在寻找解决方案时,我只在这里找到了这个非常老的线程: WPF - TabItem Contents still visible when tabitem.visibility=hidden 我想知道今天是否有更好的解决方案。我唯一能想到的就是一个自定义TabControl,看起来像这样:
public class MyTabControl : System.Windows.Controls.TabControl
{
public MyTabControl() : base()
{
var view = CollectionViewSource.GetDefaultView(this.Items);
view.CollectionChanged += TabControl_CollectionChanged;
}
private void TabControl_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (TabItem tabItem in e.NewItems)
{
tabItem.IsVisibleChanged += TabItem_IsVisibleChanged;
}
}
else if (this.Items != null)
{
foreach (TabItem tabItem in this.Items)
{
tabItem.IsVisibleChanged += TabItem_IsVisibleChanged;
}
}
}
private void TabItem_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
TabItem tabItem = sender as TabItem;
if (tabItem != null && tabItem.IsSelected && tabItem.Visibility != Visibility.Visible)
{
this.SelectedIndex = 0;
}
}
}
但是,这意味着我必须在默认控件上使用自己的TabControl。谁能想到更好的解决方案?