2010-02-15 16 views
0

J'ai joint un EventHandler à l'événement MouseDoubleClick.WPF ListView DoubleClick OriginalSource problème

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

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

La vue de ListView est basé sur le GridView, l'une de la colonne contient une CheckBox. Je veux être en mesure de ignorer le double-clic si l'on double-clique sur le CheckBox.

Le problème est que je ne peux pas trouver la source d'origine (CheckBox) pour le bloquer, comme événement de routage, je suis le Theme comme la source d'origine, et je me suis le ListViewItem direct.

Répondre

0

Vous pouvez utiliser le VisualTreeHelper pour savoir si un ancêtre du OriginalSource est un CheckBox comme ceci:

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