Tengo un TabControl
en un UserControl
respaldado por un ViewModel, y el Visibility
de uno de los elementos de tabulación está vinculado a una propiedad en el ViewModel.WPF TabControl - Seleccione una pestaña diferente cuando la visibilidad de TabItem cambie
<TabControl x:Name="myTabControl">
<TabItem Header="Tab 1" />
<TabItem Header="Tab 2" Visibility="{Binding HasData, Converter={StaticResource boolToVisibilityConverter}}"/>
</TabControl>
Cuando el Visibility
de los cambios TabItem
, se colapsa (oculta) la cabecera TabItem
, pero sigue mostrando su contenido.
Quiero TabControl
a cambiar a la pestaña visible cuando la otra pestaña está oculta, y me sorprendió un poco descubrir que esto no sucede automáticamente.
Instalación de un controlador de eventos al SelectionChanged
caso de TabControl
muestra que TabItem.IsSelected
(y TabControl.SelectedItem
) no está aún afectado cuando el TabItem.Visibility
cambios (es esto un error ?!).
He intentado tanto un disparador propiedad:
<!-- 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>
y un conjunto de datos desencadenar:
<!-- 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>
no puedo conseguir los disparadores para trabajar, y no hay VisibilityChanged
evento que puedo manejar, así que estoy algo atrapado y agradecería algo de ayuda.
¡Eso sí! (+1) No sé por qué no lo detecté antes. Supongo que MSDN debe haber filtrado las propiedades heredadas en ese momento. Voy a postergar la marca esta es la respuesta solo para ver si alguien tiene una sugerencia sin código subyacente, pero muchas gracias. – Riko