0

イベントに を添付しEventHandlerましたMouseDoubleClick

<Style TargetType="ListViewItem" BasedOn="{StaticResource MyStyle}">                                
    <EventSetter Event="MouseDoubleClick" Handler="ListViewItem_MouseDoubleClick" />
</Style>

private void ListViewItem_MouseDoubleClick(object sender, RoutedEventArgs e) {}

ListViewビューは に基づいておりGridView、列の 1 つに が含まれていCheckBoxます。ダブルクリックされた場合、ダブルクリックを無視できるようにしたいCheckBox

問題は、それをブロックする元のソース (CheckBox) が見つからないことです。Themeルーティング イベントでは を元のソースとして取得し、直接では を取得しましたListViewItem

4

1 に答える 1

0

を使用しVisualTreeHelperて、OriginalSource の祖先が次のような CheckBox であるかどうかを調べることができます。

private void ListViewItem_MouseDoubleClick(object sender, RoutedEventArgs e)
{
    var obj = e.OriginalSource as DependencyObject;

    // suppress event?
    if (IsWithinCheckBox(obj))
        return;

    // handle your event here
}

private bool IsWithinCheckBox(DependencyObject obj)
{
    while (obj != null)
    {
        if (obj is CheckBox)
            return true;

        obj = VisualTreeHelper.GetParent(obj);
    }

    return false;
}
于 2010-02-19T08:32:00.740 に答える