2013-10-21 49 views
1

我已將Interaction.Triggers設置爲ListBox,並在'SelectionChanged'事件發生時執行相應的TargetedTriggerAction,如下所示。將Interaction.Triggers設置爲ListBoxItem

<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」事件(注:列表框的ItemsSource通過填充)

+0

'<我:EventTrigger事件名稱= 「PreviewMouseDown」>'.... –

+0

嗨Omribitan,如果我將「SelectionChanged」替換爲「PreviewMouseDown」,它只會觸發ListBox,而不是ListBoxItem。我需要爲ListBoxItem設置它。所以請建議我必須爲ListBoxItem設置此「事件觸發器」 –

回答

2

你可以嘗試這樣的事情:

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

你可以做同樣不使用Interactivity.dll的用於事件處理。

3

你可以做到這一點的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; 

     } 
相關問題