将Interaction.Triggers设置为ListBoxItem

时间:2013-10-21 07:07:15

标签: c# wpf xaml listbox listboxitem

我已将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填充)

3 个答案:

答案 0 :(得分:3)

你可以在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;

        }

答案 1 :(得分:1)

您可以尝试这样的事情:

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

答案 2 :(得分:-1)

  <ListBox.Triggers>
                    <EventTrigger RoutedEvent="PreviewMouseDown">
                        <action:WorksheetListBoxAction />
                    </EventTrigger>
                </ListBox.Triggers>

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