Содержимое TabItem остается видимым, если установлено значение Collapsed/Hidden.

У меня есть TabControl, который отображает информацию по умолчанию для объектов, которые могут быть выбраны пользователем в списке. К сожалению, не все элементы TabItem применимы ко всем типам объектов. Вот почему я решил использовать DataTriggers, чтобы скрыть некоторые из них в таких случаях. Однако при тестировании я заметил, что когда TabItem уже выбран, когда он установлен в свернутом состоянии, исчезает только заголовок, но содержимое TabItems остается видимым.

При поиске решения я нашел только этот очень старый поток здесь: WPF - содержимое TabItem все еще видно, когда 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 по умолчанию. Может ли кто-нибудь придумать еще более приятное решение?


person Ralf    schedule 04.09.2018    source источник