2010-02-15 61 views
0

我附加了一個EventHandlerMouseDoubleClick事件。WPF ListView DoubleClick OriginalSource問題

<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

的問題是,我無法找到原始出處(複選框)阻止它,與路由事件中,我得到了Theme作爲原始來源,並直接給我的ListViewItem

回答

0

可以使用VisualTreeHelper找出如果OriginalSource的任何祖先是這樣一個複選框:

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; 
}