将“交互.触发器”设置为“列表框项”

本文关键字:列表框项 列表 设置 交互 触发器 | 更新日期: 2023-09-27 18:36:16

我已经将Interaction.Triggers设置为ListBox,并在发生"SelectionChanged"事件时执行相应的TargetedTriggerAction,如下所示。

<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 填充)

将“交互.触发器”设置为“列表框项”

您可以在ListBoxItem上的PreviewMouseDown事件中执行此操作

<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;
        }

你可以尝试这样的事情:

    <Style TargetType="{x:Type ListBoxItem}">
        <Style.Triggers>
            <EventTrigger RoutedEvent="PreviewMouseDown">
                <EventTrigger.Actions>
                    <action:WorksheetListBoxAction />
                </EventTrigger.Actions>
            </EventTrigger>
        </Style.Triggers>
    </Style>
  <ListBox.Triggers>
                    <EventTrigger RoutedEvent="PreviewMouseDown">
                        <action:WorksheetListBoxAction />
                    </EventTrigger>
                </ListBox.Triggers>

您可以在不使用交互性的情况下执行相同的操作.dll以进行事件处理。