2010-08-09 35 views
3

Je développe un contrôle basé sur TreeView et mon événement de double clic continue de gonfler mes noeuds TreeViewItem.L'événement RoutedEvent géré continue de générer des bulles

Le but est d'agrandir ou de réduire le TreeViewItem lorsque vous double-cliquez dessus.

J'ai un style qui applique un gestionnaire d'événements pour l'événement MouseDoubleClick à chaque TreeViewItem.

Voici le code qui gère l'événement


private void TreeViewItemDoubleClicked(object sender, RoutedEventArgs e) 
{ 
    // Get the specific tree view item that was double clicked 
    TreeViewItem treeViewItem = sender as TreeViewItem; 

    // not null? 
    if(null != treeViewItem) 
    { 
     // Switch expanded state 
     if(true == treeViewItem.IsExpanded) 
     { 
      treeViewItem.IsExpanded = false; 
     } 
     else 
     { 
      treeViewItem.IsExpanded = true; 
     } 

     // Set event handled 
     e.Handled = true; // [1] 
    } 
} 

Cela fonctionne bien pour le niveau supérieur TreeViewItem mais quand un enfant est le double cliquée, l'événement bouillonne l'arbre provoquant l'ensemble de la branche de l'effondrement. Pourquoi l'événement continue de bouillonner? Comme indiqué un [1] je définis l'événement comme manipulé.

Répondre

1

haine répondre à mes propres questions, mais voici la solution que je suis en fin de compte à utiliser.

Après avoir lu les quelques sources qui a précisé que le MouseDoubleClick est élevé pour chaque TreeViewItem dans la branche (de l'enfant jusqu'à la racine), peu importe si l'événement est géré j'ai utilisé la réponse de cette question:

WPF TreeView, get TreeViewItem in PreviewMouseDown event

pour obtenir le TreeViewItem qui était sous l'événement de la souris. Si l'expéditeur actuel est égal à TreeViewItem de l'événement de la souris, je développe/réduis au besoin. Sinon, j'ignore l'événement et ne fais rien.

-2

Essayez de régler Handled avant l'expansion/effondrement ...

+0

Salut, merci pour les commentaires. J'ai essayé cela et le comportement est le même. L'événement continue de bouillonner. – Matthew