Установите 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 для обработки событий.

Другие вопросы по тегам