web-dev-qa-db-ja.com

WPF:ListBoxアイテムのクリックを処理するにはどうすればよいですか?

私のWPFアプリでは、ListBox SelectionChangedイベントを処理しており、正常に実行されます。

次に、クリックイベントを処理する必要があります(すでに選択されているアイテムの場合でも)。 MouseDownを試しましたが、機能しません。アイテムのリストボックスクリックを処理するにはどうすればよいですか?

17
Cris

PreviewMouseDownイベントを処理するだけです。

private void listBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    var item = ItemsControl.ContainerFromElement(listBox, e.OriginalSource as DependencyObject) as ListBoxItem;
    if (item != null)
    {
        // ListBox item clicked - do some cool things here
    }
}
33
Vitus

おそらく PreviewMouseDown イベントを試してください。 MouseDownイベントは飲み込まれ、SelectionChangedイベントに変換されます。

唯一の欠点は、PreviewMouseDownSelectionChangedの前に発生することです。

6
Arcturus

リストボックスは内部的にマウスダウンを使用して、変更された選択を実行します。したがって、プレビューマウスダウンイベントを使用できます。

マウスを下にプレビューする以外に、EventManager.RegisterClassHandler ...を使用できます。

     EventManager.RegisterClassHandler(typeof(ListBoxItem), ListBoxItem.MouseLeftButtonDownEvent, new RoutedEventHandler(EventBasedMouseLeftButtonHandler));

     private static void EventBasedMouseLeftButtonHandler(object sender, RoutedEventArgs e)
     {
     }

これが役立つかどうか教えてください...

3
WPF-it