3

ユーザーが特定のListBoxアイテムをシングルクリックしたときに、いくつかのコードを実行したいと思います。私のセットアップはListBoxカスタムItemsPanelTemplate(PavanのElementFlow)を使用しています。入ってくる位置データに基づいて、MouseLeftButtonDownどのアイテムがクリックされたかを知る方法はありますか?これは、カスタムによって少し難しくなります(または混乱します)ItemsPanelTemplate

4

1 に答える 1

12

ItemContainerStyleを作成し、その中にEventSetterを指定できます。

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

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

また、このメソッドを使用したくない場合は、HitTestを呼び出して、指定した位置にあるVisualオブジェクトを見つけることができます。

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;
}
于 2009-08-26T16:01:32.440 に答える