Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn ein Element TreeView viele Elemente enthält, kann die Zeit, die zum Laden benötigt wird, zu einer erheblichen Verzögerung auf der Benutzeroberfläche führen. Sie können die Ladezeit verbessern, indem Sie die VirtualizingStackPanel.IsVirtualizing
angefügte Eigenschaft auf true
festlegen. Die Benutzeroberfläche reagiert möglicherweise auch langsam, wenn ein Benutzer TreeView mit dem Mausrad verwendet, um zu scrollen oder den Daumen einer Bildlaufleiste zieht. Sie können die Leistung des TreeView beim Scrollen des Benutzers verbessern, indem Sie die VirtualizingStackPanel.VirtualizationMode
angehängte Eigenschaft auf VirtualizationMode.Recycling festlegen.
Beispiel
BESCHREIBUNG
Im folgenden Beispiel wird ein TreeView erstellt, das die VirtualizingStackPanel.IsVirtualizing
angefügte Eigenschaft auf "true" setzt und die VirtualizingStackPanel.VirtualizationMode
angefügte Eigenschaft auf VirtualizationMode.Recycling, um die Leistung zu optimieren.
Programmcode
<StackPanel>
<StackPanel.Resources>
<src:TreeViewData x:Key="dataItems"/>
<HierarchicalDataTemplate DataType="{x:Type src:ItemsForTreeView}"
ItemsSource="{Binding Path=SecondLevelItems}">
<!--Display the TopLevelName property in the first level.-->
<TextBlock Text="{Binding Path=TopLevelName}"/>
<!--Display each string in the SecondLevelItems property in
the second level.-->
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<!--Set the foreground of the items in the second level
to Navy.-->
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="Foreground" Value="Navy"/>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
</StackPanel.Resources>
<TreeView Height="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.-->
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True"/>
<Setter Property="Foreground" Value="Green"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</StackPanel>
Das folgende Beispiel zeigt die Daten, die im vorherigen Beispiel verwendet werden.
public class TreeViewData : ObservableCollection<ItemsForTreeView>
{
public TreeViewData()
{
for (int i = 0; i < 100; ++i)
{
ItemsForTreeView item = new ItemsForTreeView();
item.TopLevelName = "item " + i.ToString();
Add(item);
}
}
}
public class ItemsForTreeView
{
public string TopLevelName { get; set; }
private ObservableCollection<string> level2Items;
public ObservableCollection<string> SecondLevelItems
{
get
{
level2Items ??= new ObservableCollection<string>();
return level2Items;
}
}
public ItemsForTreeView()
{
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
Siehe auch
.NET Desktop feedback