Pregunta

Estoy creando un TreeView utilizando el método siguiente bucle a través de un documento XML.

Sin embargo, cuando se selecciona cualquier TreeViewItem todos los nodos en la jerarquía está recibiendo el evento activa en lugar de sólo la TreeViewItem seleccionado.

Por ejemplo digamos que seleccionamos el nieto de un nodo. Todos los nodos incluyendo nieto, hijo, padre están provocando el mismo evento.

En otras palabras, esperaríamos que sólo el nieto desencadenar el evento asociado mientras que y el evento debe ser llamado una sola vez, sino que termina siendo llamado 3 veces para todos los nodos de la jerarquía del elemento seleccionado.

Este es el código:

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;

}

Por favor, hágamelo saber si usted tiene alguna sugerencia, gracias

N

¿Fue útil?

Solución

Esto está funcionando correctamente. El evento PreviewMouseLeftButtonDown es un evento enrutado (en este caso, la estrategia es un túnel). Esto significa que la raíz del árbol visual obtiene el primer evento, y se abre camino hacia abajo hasta que alcanza el control que originalmente ha activado el evento. Los eventos MouseLeftButtonDown y Selected se encamina también, pero su estrategia está en ebullición. - esto significa que el evento se abre camino hasta el árbol visual, empezando por el control que activa el evento

Si quieres un evento enrutado a no continúa para ser enviado, establecer la propiedad Handled del RoutedEventArgs pasado a true.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top