ListView とかの子要素があるコントロールで、子要素(メニューの一項目とか)をダブルクリックで操作したい場合があります。
これを実現するとき、単純に ListView のイベント(ListView.MouseDoubleClick) に処理を記述すると、子要素のない領域や、スクロールバーへのダブルクリックでも反応してしまい、面倒です。
これに対処するには、子要素(ListViewItem) のイベント (ListViewItem.MouseDoubleClick) に処理を書くようにします。
ただ、直接は指定できないので、Style 設定を経由して指定します。 (直接書ける方法があるかもしれないけど知らない--;)
<ListView Name="A"
ItemsSource="{Binding Items}"
Margin="0,0,0,275">
<ListView.Resources>
<Style TargetType="ListViewItem">
<EventSetter Event="MouseDoubleClick"
Handler="ListViewItem_MouseDoubleClick" />
</Style>
</ListView.Resources>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
コードビハインドの例はこんな感じ
Class MainWindow
Public Property Items As New ObjectModel.ObservableCollection(Of String)
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Me.DataContext = Me
Me.Items.Add("あああ")
Me.Items.Add("いいい")
Me.Items.Add("ううう")
Me.Items.Add("えええ")
End Sub
Private Sub ListViewItem_MouseDoubleClick(sender As Object, e As MouseButtonEventArgs)
Dim item = CType(sender, ListViewItem)
MsgBox(item.Content)
End Sub
End Class