[XAML] ListView で ダブルクリックでイベント処理したいとき

2013年12月17日

 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





カテゴリー: WPF, xaml

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org