У меня есть 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 вместо стандартного. Кто-нибудь может придумать еще более приятное решение?