WPF TreeViewItem
-
21-09-2019 - |
Domanda
Sto creando un TreeView
utilizzando il seguente metodo scorrendo un documento XML.
Tuttavia, quando qualsiasi TreeViewItem
si seleziona tutti i nodi nella gerarchia stanno ottenendo l'evento attiva anziché solo la TreeViewItem
selezionato.
Per esempio diciamo che selezioniamo il nipote di un nodo. Tutti i nodi tra cui nipote, figlio, genitore stanno innescando lo stesso evento.
In altre parole ci si aspetterebbe solo il nipote innescare l'evento associato, mentre e l'evento dovrebbe ottenere chiamato solo una volta, ma si finisce per essere chiamato 3 volte per tutti i nodi della gerarchia della voce selezionata.
Ecco il codice:
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;
}
Per favore fatemi sapere se avete suggerimenti, grazie
N
Soluzione
Questo funziona correttamente. L'evento PreviewMouseLeftButtonDown
è un evento indirizzato (in questo caso la strategia è tunneling). Ciò significa che la radice dell'albero visiva respinge l'evento, e funziona la sua strada verso il basso fino a raggiungere il controllo che ha attivato in origine l'evento. Gli eventi MouseLeftButtonDown
e Selected
è anche instradati, ma la sua strategia è spumeggiante -. Questo significa che l'evento si sta facendo strada l'albero visuale, partendo con il controllo che ha attivato l'evento
Se si desidera un evento indirizzato di non continuare ad essere inviato, impostare la proprietà Handled
del RoutedEventArgs
passata a true
.