2009-08-26 25 views
2

ユーザーが指定したListBoxアイテムを1回クリックしたときにコードを実行したい。私の設定はで、カスタムはItemsPanelTemplate(Pavan's ElementFlow)です。 MouseLeftButtonDownに来る位置データに基づいて、どのアイテムがクリックされたかを示す方法がありますか?これは、カスタムItemsPanelTemplateによって少し難しくなりました(またはより混乱します)。MouseLeftButtonDownからWPF ListBoxアイテムを取得する

答えて

11

あなたはItemContainerStyleを持っており、それにEventSetterを指定することができます。

<ListBox> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <EventSetter Event="MouseLeftButtonDown" Handler="ListBoxItem_MouseLeftButtonDown" /> 
    ... 

その後、のMouseLeftButtonDownのハンドラでは、「送信者が」ListBoxItemになります。

HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt); 

ListBoxItem lbi = FindParent<ListBoxItem>(result.VisualHit); 

public static T FindParent<T>(DependencyObject from) 
    where T : class 
{ 
    T result = null; 
    DependencyObject parent = VisualTreeHelper.GetParent(from); 

    if (parent is T) 
     result = parent as T; 
    else if (parent != null) 
     result = FindParent<T>(parent); 

    return result; 
} 
+0

うわー、完璧な:あなたは、このメソッドを使用しない場合

また、指定した位置にビジュアルオブジェクトを見つけるためにHitTestを呼び出すことができます!しかし、代わりに{x:Type ListBoxItem}する必要があります。 – Mike

+0

ありがとう!それを私が直した。 – decasteljau

関連する問題