Содержимое TabItem остается видимым, когда установлено значение Свернутый / Скрытый - PullRequest
0 голосов
/ 04 сентября 2018

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

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

...