Cómo: encontrar un elemento TreeView en una vista de árbol""<summary>'''Buscar recursivamente elementos en ese subárbol. ""</summary>''<param name = "container">""Control principal. Puede ser un TreeView o un TreeViewItem. '</param>""<param name = "item">'El elemento a buscar. ""</param>''<returns>El TreeViewItem que contiene el elemento especificado. ' & lt/returns & gt;Función privada GetTreeViewItem(Contenedor ByVal como control de elementos, elemento ByVal como objeto)Como TreeViewItem Si el contenedor no es Nada, entonces si es el contenedor. DataContext es un elemento, luego devuelve TryCast(contenedor, TreeViewItem) End If 'Si el tipo de contenedor es TreeViewItem y no es DirectCast(contenedor, TreeViewItem), expanda el contenedor actual. Luego se expande el contenedor. SetValue(TreeViewItem.IsExpandedProperty, True) End If 'Intenta generar ItemsPresenter y ItemsPanel. Llamando a ApplyTemplate. Tenga en cuenta que en el caso de "virtualización, incluso si IsExpanded = true", aún debemos realizar este paso para "regenerar los elementos visuales tal como pueden haber sido virtualizados fuera del contenedor. aplicar plantilla()Atenuar presentador de elementos Como presentador de elementos = direct cast(Container.Template.FindName("ItemsHost", contenedor), ItemsPresenter) Si itemsPresenter no es Nothing, itemsPresenter. ApplyTemplate() De lo contrario, 'La plantilla de árbol no tiene ItemsPresenter con nombre', así que recorra los descendientes y encuentre a los hijos. itemsPresenter = buscar elemento visual secundario (del presentador de elementos) (contenedor) si el presentador de elementos no es nada, entonces el contenedor actualiza el diseño () presentador de elementos = buscar elemento visual secundario (del presentador de elementos) (contenedor) End If End If Dim items host Panel As Panel = direct cast(visual tree helper. GetChild(itemsPresenter, 0), Panel)' Haga esto para asegurarse de que se cree el generador para este panel. Pruebe Atenuar a los niños como UIElementCollection = itemsHostPanel Atenuar el panel de virtualización como MyVirtualizingStackPanel = cast. (itemsHostPanel, MyVirtualizingStackPanel), el índice del contenedor es entero = 0.
items . Count-1 Dim subcontainer Como elemento de vista de árbol Si virtualizingPanel no está vacío, "mueve el elemento a la vista para que" se genere el contenedor. Panel de virtualización. BringIntoView(index)sub contenedor = direct cast(container.ItemContainerGenerator.ContainerFromIndex(index),TreeViewItem)Else sub contenedor = direct cast(container.ItemContainerGenerator.ContainerFromIndex(index),TreeViewItem)Traer el elemento a la vista para mantenerlo con el panel virtualizado Mismo comportamiento . subcontenedor. BringIntoView()End If If If subcontenedor Nada Entonces 'Busca el siguiente nivel del objeto. dim resultContainer Como elemento de vista de árbol = GetTreeViewItem (subcontenedor, elemento) Si el contenedor de resultados no es Nada, devuelve resultContainer. De lo contrario, "El objeto no está debajo de este TreeViewItem", así que contraigalo. subcontenedor. es expandir d = False End If End If Next End If Return Nothing End Function ' ' ' <summary>'''Busca en el árbol visual elementos de un tipo específico. ""</summary>''<typeparam name = "T">El tipo de elemento que se encontrará. </type param>""<param name = "visual">Elemento principal. </param>''<returns></returns>Función privada buscar hijo visual (De T como visual)(ByVal Visual como visual)Como T para I como entero = 0 Al ayudante del árbol visual. GetChildrenCount(Visual)-1 Dim child As Visual = direct cast(Visual tree helper. GetChild(visual, I), visual) Dim se escribe correctamente como T = TryCast(child, T) si Child no es Nothing is Nothing, devuelve el finalizado correctamente escrito si el descendiente tenue es T = FindVisualChild(Of T)(child) si el descendiente no es Nothing, devuelve descendiente End if End si Next devuelve Nothing End Function ///<summary> ///Busca recursivamente elementos en este subárbol . ///</summary>///<param name = "container">///Control principal. Puede ser un TreeView o un TreeViewItem. ///</param>///<param name = "item">//El elemento a buscar.