Question

Je crée une TreeView en utilisant la méthode suivante en boucle à travers un document XML.

Cependant, quand tout TreeViewItem est sélectionné tous les noeuds dans la hiérarchie obtiennent l'événement déclenche au lieu de simplement le TreeViewItem sélectionné.

Par exemple, disons que nous choisissons le petit-fils d'un nœud. Tous les nœuds, y compris un petit-enfant, enfant, parent déclenchent le même événement.

En d'autres termes, nous nous attendons seulement le petit-enfant déclenche l'événement associé et alors que l'événement doit obtenir appelé une seule fois, mais il finit par être appelé 3 fois pour tous les nœuds de la hiérarchie de l'élément sélectionné.

Voici le code:

TreeViewItem getTreeViewItemWithHeader(XmlNode node)
{
    TreeViewItem tvi = new TreeViewItem();
    tvi.Header = node.Name;//hdr;
    tvi.Tag = node.Attributes["Tag"].Value;
    tvi.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(tvi_PreviewMouseLeftButtonDown);
    tvi.Selected += new RoutedEventHandler(tvi_Selected);

    return tvi;

}

S'il vous plaît laissez-moi savoir si vous avez des suggestions, merci

N

Était-ce utile?

La solution

fonctionne correctement. L'événement PreviewMouseLeftButtonDown est un événement routé (dans ce cas, la stratégie est tunneling). Cela signifie que la racine de l'arbre visuel obtient le premier événement, et il fait son chemin vers le bas jusqu'à ce qu'il atteigne le contrôle qui a déclenché à l'origine de l'événement. Les événements MouseLeftButtonDown et Selected est également routés, mais sa stratégie bouillonne -. Cela signifie que l'événement fait son chemin jusqu'à l'arbre visuel, en commençant par le contrôle qui a déclenché l'événement

Si vous voulez un événement routé de ne pas continuer à envoyer, définissez la propriété Handled du RoutedEventArgs passé pour true.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top