Pregunta

Estoy creando un TreeView en tiempo de ejecución. Tiene varios nodos (TreeViewItem), cada uno que tiene un nombre. Inicialmente se derrumbó. Un cuadro combinado muestra los distintos nombres de todos TreeViewItem. Tengo que resaltar un TreeViewItem basado en el nombre seleccionado. Estoy utilizando una función recursiva y obtiene el contenedor TreeViewItem como esto:

if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                continue;

TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();

pero es

  

parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted

para todos los elementos colapsados. ¿Cómo puedo generar contenedores para manualmente (sin expandir ellos)?

¿Fue útil?

Solución

Cada vez que usted se encuentra caminando por el árbol visual se debe pensar seriamente en la construcción de un modelo de vista.

el modelo de vista puede aumentar la funcionalidad treeviews sin preocuparse de los tipos de problemas que está enfrentando.

El modelo de vista para su aplicación tendría un par de propiedades adicionales

IsSelected

IsExpanded

IsHighlighted

, así como su

Data

, entonces sería unirse (mediante un ItemContainerStyle) la IsSelected, IsHighlighted y IsExpanded a la TreeViewItem, a continuación, ya que tenía una colección de estos modelos de vista que podría hacer su búsqueda en el modelo de vista y acaba de establecer la propiedad IsHighlighted. El modelo de vista sería entonces responder y debido a la unión con el estilo sería poner de relieve la TreeViewItem si querías. También podría hacer cosas como cobarde expandir todos los nodos anteriores. La vista de árbol respondería a esto.

El modelo de vista cuando se combina con una vista de árbol da mucha más flexibilidad y se detiene esos ejercicios rastreo árbol visual (que son un corte, y la sensación sucia)

buen artículo sobre el modelo de vista y TreeView .. .

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