设为“折叠/隐藏”时,TabItem的内容保持可见

时间:2018-09-04 12:22:29

标签: wpf xaml visibility tabcontrol tabitem

我有一个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。谁能想到更好的解决方案?

0 个答案:

没有答案