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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top