У меня есть TabControl
на UserControl
, поддерживаемом ViewModel, и Visibility
одного из элементов вкладки привязан к свойству на ViewModel.
<TabControl x:Name="myTabControl">
<TabItem Header="Tab 1" />
<TabItem Header="Tab 2" Visibility="{Binding HasData, Converter={StaticResource boolToVisibilityConverter}}"/>
</TabControl>
КогдаVisibility
из TabItem
изменяется, он сворачивает (скрывает) заголовок TabItem
, но продолжает отображать его содержимое.
Я хочу, чтобы переключатели с TabControl
на переходили на видимую вкладку, когдадругая вкладка скрыта , и был немного удивлен, обнаружив, что это не происходит автоматически.
Прикрепление обработчика события к событию SelectionChanged
TabControl
показывает, что TabItem.IsSelected
(и TabControl.SelectedItem
) даже не изменяется при изменении TabItem.Visibility
(это ошибка ?!).
Я пробовал использовать триггер свойства :
<!-- This doesn't compile because of TargetName on the Setter, think you can only use it in Control Templates.
I don't know how to refer to the parent TabControl from within the TabItem style. -->
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
<Style.Triggers>
<Trigger Property="Visibility" Value="Collapsed">
<Setter TargetName="myTabControl" Property="SelectedIndex" Value="0" />
</Trigger>
</Style.Triggers>
</Style>
</TabControl.ItemContainerStyle>
и триггер данных :
<!-- This doesn't quite work, it affects the Visibility of the TabItem's content too -->
<TabControl.Style>
<Style TargetType="{x:Type TabControl}" BasedOn="{StaticResource {x:Type TabControl}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedItem.Visibility, ElementName=tabControl}"
Value="Collapsed">
<Setter Property="SelectedIndex" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.Style>
Я не могу заставить триггеры работать, и нет никакого события VisibilityChanged
, которое я мог бы обработать, поэтому я застрял и был бы признателен за некоторую помощь.