在 XAML 中我有:
<sdk:TreeView x:Name="navigationTreeView" Grid.Column="0" Grid.Row="1" SelectedItemChanged="TreeView_SelectedItemChanged">
<sdk:TreeView.ItemContainerStyle>
<Style TargetType="sdk:TreeViewItem">
<Setter Property="IsExpanded" Value="True"/>
</Style>
</sdk:TreeView.ItemContainerStyle>
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=Nodes}">
<StackPanel Orientation="Horizontal">
<!--<Image Source="{Binding Path=ImageUri}" />-->
<TextBlock Text="{Binding Path=Title}" ToolTipService.ToolTip="{Binding Path=Title}"/>
</StackPanel>
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>
在后面的代码中:
this.navigationTreeView.ItemsSource = nodes;
navigationTreeView.ExpandAll();
有 1000 个项目作为一个节点的子节点。如果我不扩展元素,一切都很好。但是当我扩展那个节点时它非常慢(可能是 10 秒)。我可以做些什么来加快它的速度?
Silverlight 4,2010 年 4 月工具包。
最佳答案
与 WPF 不同,Silverlight(直到 Silverlight 4,不确定 5)不支持分层数据的 UI 虚拟化,这就是为什么当您展开节点时,HierarchicalDataTemplate
中的 1000 个项目> 未虚拟化,加载时间超过 10 秒。
我相信 Telerik 的 RadTreeView
有其内置的 UI 虚拟化,但控件不是免费的。
到目前为止,我找到的最佳解决方案来自 this site .请注意,它仍然是一个 ListBox
解决方案,但是,因为它不使用 HierarchicalDataTemplate
,所以它是完全虚拟化的,看起来就像一个 TreeView
.同样通过查看源代码,实现起来也很容易。
我知道这不是这个问题的完美答案,但至少给了你一些选择。 :)
关于silverlight 4 treeview 在很多项目时扩展缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903188/