Cómo: Mejorar el rendimiento de un control TreeView
Artículo
Si un TreeView contiene muchos elementos, la cantidad de tiempo que tarda en cargarse puede provocar un retraso significativo en la interfaz de usuario. Puede mejorar el tiempo de carga estableciendo la propiedad adjuntaVirtualizingStackPanel.IsVirtualizing en true. La interfaz de usuario también puede reaccionar lentamente cuando un usuario desplaza el TreeView con la rueda del mouse o arrastrando el control de una barra de desplazamiento. Puede mejorar el rendimiento del TreeView cuando el usuario se desplaza estableciendo la propiedad adjunta VirtualizingStackPanel.VirtualizationMode en VirtualizationMode.Recycling.
Ejemplo
Descripción
En el ejemplo siguiente se crea un objeto TreeView que establece la propiedad adjunta VirtualizingStackPanel.IsVirtualizing en true y la propiedad adjunta VirtualizingStackPanel.VirtualizationMode en VirtualizationMode.Recycling para optimizar su rendimiento.
Código
XAML
<StackPanel><StackPanel.Resources><src:TreeViewDatax:Key="dataItems"/><HierarchicalDataTemplateDataType="{x:Type src:ItemsForTreeView}"ItemsSource="{Binding Path=SecondLevelItems}"><!--Display the TopLevelName property in the first level.--><TextBlockText="{Binding Path=TopLevelName}"/><!--Display each string in the SecondLevelItems property in
the second level.--><HierarchicalDataTemplate.ItemTemplate><DataTemplate><TextBlockText="{Binding}"/></DataTemplate></HierarchicalDataTemplate.ItemTemplate><!--Set the foreground of the items in the second level
to Navy.--><HierarchicalDataTemplate.ItemContainerStyle><StyleTargetType="TreeViewItem"><SetterProperty="Foreground"Value="Navy"/></Style></HierarchicalDataTemplate.ItemContainerStyle></HierarchicalDataTemplate></StackPanel.Resources><TreeViewHeight="200"ItemsSource="{Binding Source={StaticResource dataItems}}"VirtualizingStackPanel.IsVirtualizing="True"VirtualizingStackPanel.VirtualizationMode="Recycling"><TreeView.ItemContainerStyle><!--Expand each TreeViewItem in the first level and
set its foreground to Green.--><StyleTargetType="TreeViewItem"><SetterProperty="IsExpanded"Value="True"/><SetterProperty="Foreground"Value="Green"/></Style></TreeView.ItemContainerStyle></TreeView></StackPanel>
En el ejemplo siguiente se muestran los datos que usa el ejemplo anterior.
C#
publicclassTreeViewData : ObservableCollection<ItemsForTreeView>
{
publicTreeViewData()
{
for (int i = 0; i < 100; ++i)
{
ItemsForTreeView item = new ItemsForTreeView();
item.TopLevelName = "item " + i.ToString();
Add(item);
}
}
}
publicclassItemsForTreeView
{
publicstring TopLevelName { get; set; }
private ObservableCollection<string> level2Items;
public ObservableCollection<string> SecondLevelItems
{
get
{
level2Items ??= new ObservableCollection<string>();
return level2Items;
}
}
publicItemsForTreeView()
{
for (int i = 0; i < 10; ++i)
{
SecondLevelItems.Add("Second Level " + i.ToString());
}
}
}
Public Class TreeViewData
Inherits ObservableCollection(Of ItemsForTreeView)
Public Sub New()
For i As Integer = 0 To 99
Dim item As New ItemsForTreeView()
item.TopLevelName = "item " & i.ToString()
Add(item)
Next
End Sub
End Class
Public Class ItemsForTreeView
Private _TopLevelName As String
Public Property TopLevelName() As String
Get
Return _TopLevelName
End Get
Set(ByVal value As String)
_TopLevelName = value
End Set
End Property
Private level2Items As ObservableCollection(Of String)
Public ReadOnly Property SecondLevelItems() As ObservableCollection(Of String)
Get
If level2Items Is Nothing Then
level2Items = New ObservableCollection(Of String)()
End If
Return level2Items
End Get
End Property
Public Sub New()
For i As Integer = 0 To 9
SecondLevelItems.Add("Second Level " & i.ToString())
Next
End Sub
End Class
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de .NET Desktop feedback
.NET Desktop feedback es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
¿Quiere saber cómo se está funcionando su aplicación y cómo mejorarla? Esta ruta de aprendizaje le ayudará a identificar el rendimiento de sus aplicaciones y a compartir formas de solucionar su aplicación de lienzo de Power Apps.
Obtenga información sobre cómo el control TreeView de Windows Presentation Foundation muestra información en una estructura jerárquica mediante nodos, y vea ejemplos sencillos.
Obtenga información sobre cómo usar las propiedades SelectedValue y SelectedValuePath para especificar un valor para SelectedItem en un objeto TreeView de Windows Presentation Foundation.