eventi mouseover e IsSelected per ListBoxItem in WPF
-
27-10-2019 - |
Domanda
Voglio avere ListBoxItem innesco due eventi che posso prendere dal UserControl esterna che contiene il ListBox. Ecco quello che ho ottenuto finora:
<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>
Ora, questo chiama il mio evento listbox_Selected. Quello che voglio è una chiamata o un evento diverso proprietà quando IsMouseOver. Giusto per chiarire, io so come cambiare lo sfondo / primo piano o altre proprietà della ListBoxItem stesso. Ma voglio cambiare qualcosa della nonni.
Soluzione
È già quell'evento ... Gestire un evento indirizzato statica dalla classe ListBoxItem
chiamato "Selected" (e c'è anche "non selezionati") in qualsiasi antenato, a condizione che noi non maniglia "Selezione" in qualsiasi evento nella struttura di discendenti ...
<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>
E in codice dietro ...
private void OnListBoxSelected(object sender, RoutedEventArgs e)
{
var window = sender as Window;
var listBoxItem = e.OriginalSource as ListBoxItem;
var selectedItem = listBoxItem.DataContext;
}
Spero che questo aiuti ...