événements et MouseOver isSelected pour ListBoxItem dans WPF
-
27-10-2019 - |
Question
Je veux avoir ListBoxItem déclencher deux événements que je peux attraper de la usercontrol externe qui contient la zone de liste. Voici ce que je suis arrivé à ce jour:
<ListBox
Background="Black"
Selected="listbox_selected"
x:Name="listBox">
<ListBox.Resources>
<Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self}}"
Value="True">
<Setter Property="IsSelected" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Resources>
</ListBox>
Maintenant, cela appelle mon événement listbox_Selected. Ce que je veux est un appel d'un événement différent ou bien quand IsMouseOver. Juste pour le rendre clair, je sais comment changer l'arrière-plan / premier plan ou d'autres propriétés du ListBoxItem lui-même. Mais je veux changer quelque chose du grand-parent.
La solution
Vous avez déjà cet événement ... Gérer un événement statique routé de classe ListBoxItem
appelé « Sélectionné » (et il y a aussi « UNSELECTED ») à tout ancêtre, à condition que nous ne poignée « Sélection » où l'événement dans l'arborescence des descendants ...
<Window x:Class="...."
...
ListBoxItem.Selected="OnListBoxSelected">
<Grid>
<ListBox ItemsSource="{Binding Employees}"
DispalyMemberPath="Name"
selectedValuePath="ID" >
<ListBox.Resources>
<Style TargetType="ListBoxItem"
BasedOn="{StaticResource
{x:Type ListBoxItem}}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver,
RelativeSource={RelativeSource
Self}}"
Value="True">
<Setter Property="IsSelected"
Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Resources>
</ListBox>
</Grid>
</Window>
Et dans le code derrière ...
private void OnListBoxSelected(object sender, RoutedEventArgs e)
{
var window = sender as Window;
var listBoxItem = e.OriginalSource as ListBoxItem;
var selectedItem = listBoxItem.DataContext;
}
Hope this helps ...