WPF TreeViewItem
-
21-09-2019 - |
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
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
.