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,其中一个列包含一个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 回答