wpf triggers listbox itemtemplate event-triggers

Activador de WPF para IsSelected en una plantilla DataTemplate para ListBox



triggers itemtemplate (2)

Tengo un listbox, y tengo el siguiente ItemTemplate para él:

<DataTemplate x:Key="ScenarioItemTemplate"> <Border Margin="5,0,5,0" Background="#FF3C3B3B" BorderBrush="#FF797878" BorderThickness="2" CornerRadius="5"> <DockPanel> <DockPanel DockPanel.Dock="Top" Margin="0,2,0,0"> <Button HorizontalAlignment="Left" DockPanel.Dock="Left" FontWeight="Heavy" Foreground="White" /> <Label Content="{Binding Path=Name}" DockPanel.Dock="Left" FontWeight="Heavy" Foreground="white" /> <Label HorizontalAlignment="Right" Background="#FF3C3B3B" Content="X" DockPanel.Dock="Left" FontWeight="Heavy" Foreground="White" /> </DockPanel> <ContentControl Name="designerContent" Visibility="Collapsed" MinHeight="100" Margin="2,0,2,2" Content="{Binding Path=DesignerInstance}" Background="#FF999898"> </ContentControl> </DockPanel> </Border> </DataTemplate>

Como puede ver, ContentControl tiene Visibility configurado para contraerse.

Necesito definir un disparador que haga que la Visibilidad se configure como "Visible"

cuando se selecciona ListItem, pero no puedo resolverlo.

¿Algunas ideas?

ACTUALIZACIÓN: Por supuesto, podría simplemente duplicar DataTemplate y agregar disparadores al ListBox en cuestión para usar uno u otro, pero quiero evitar la duplicación de este código.


@ Matt, ¡¡¡Gracias !!!

Solo tuve que agregar un disparador para IsSelected == false también, ¡y ahora funciona como un hechizo!

<ContentControl.Style> <Style TargetType="{x:Type ContentControl}"> <Setter Property="Visibility" Value="Collapsed"/> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True"> <Setter Property="Visibility" Value="Visible"/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="False"> <Setter Property="Visibility" Value="Collapsed"/> </DataTrigger> </Style.Triggers> </Style>


Puede diseñar su ContentControl de manera que se active un disparador cuando se selecciona su contenedor (ListBoxItem):

<ContentControl x:Name="designerContent" MinHeight="100" Margin="2,0,2,2" Content="{Binding Path=DesignerInstance}" Background="#FF999898"> <ContentControl.Style> <Style TargetType="{x:Type ContentControl}"> <Setter Property="Visibility" Value="Collapsed"/> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True"> <Setter Property="Visibility" Value="Visible"/> </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> </ContentControl>

Alternativamente, creo que puede agregar el activador a la plantilla misma y hacer referencia al control por su nombre. No conozco esta técnica lo suficientemente bien como para escribirla en la memoria y asumir que funcionará, pero es algo como esto:

<DataTemplate x:Key="ScenarioItemTemplate"> <DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True"> <Setter TargetName="designerContent" Property="Visibility" Value="Visible"/> </DataTrigger> </DataTemplate.Triggers> ... </DataTemplate>