Установите Interaction.Triggers для ListBoxItem
Я установил Interaction.Triggers в ListBox и выполняю соответствующее TargetedTriggerAction, когда происходит событие "SelectionChanged", как показано ниже.
<ListBox x:Name="WorksheetListBox" ItemsSource="{Binding WorkSheetCollection}"
ItemTemplate="{StaticResource workSheetTemplate}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<action:WorksheetListBoxAction />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
Но мое требование - мне нужно установить Interaction.Triggers на событие ListBoxItem'PreviewMouseDown' (Примечание: ListBox заполняется с помощью ItemsSource)
3 ответа
Решение
Вы можете попробовать что-то вроде этого:
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<EventTrigger RoutedEvent="PreviewMouseDown">
<EventTrigger.Actions>
<action:WorksheetListBoxAction />
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
Вы можете сделать это событие PreviewMouseDown в ListBoxItem
<ListBox ItemsSource="{StaticResource Data}">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Name="TaskButton" Content="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="PreviewMouseDown"
Handler="ItemOnPreviewMouseDown" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
private void ItemOnPreviewMouseDown(
object sender, MouseButtonEventArgs e)
{
((ListBoxItem) sender).IsSelected = true;
}
<ListBox.Triggers>
<EventTrigger RoutedEvent="PreviewMouseDown">
<action:WorksheetListBoxAction />
</EventTrigger>
</ListBox.Triggers>
Вы можете сделать то же самое без использования Interactivity.dll для обработки событий.