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