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