Car*_*rlo 17 wpf virtualization
我正在试图弄清楚这个虚拟化功能,我不确定我是否理解它错误或发生了什么,但我正在使用ANTS内存分析器来检查虚拟化TreeView中的项目数量,以及它只是不断增加.我有一个包含1,001个项目的TreeView(1个根,1000个子项),我总是得到1,001个TreeViewItems,1,001个ToggleButtons和1,001个TextBlocks.是不是虚拟化应该重复使用这些项目?如果是这样,为什么我每个都有1,001个呢?此外,CleanUpVirtualizedItem永远不会触发.
如果我理解这个错误并且你有资源如何使用它,请告诉我.我通过互联网搜索但没有找到任何有用的东西.
编辑:
甚至树所使用的内存也都来自aporx.当我展开并滚动浏览所有项目时,4mb到12mb.
让我知道谢谢.
这是我的代码.
XAML:
<Window x:Class="RadTreeViewExpandedProblem.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<TreeView x:Name="treeView"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.CleanUpVirtualizedItem="TreeView_CleanUpVirtualizedItem">
<TreeView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</TreeView.ItemsPanel>
</TreeView>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
C#:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
TreeViewItem rootItem = new TreeViewItem() { Header = "Item Level 0" };
for (int i = 0; i < 1000; i++)
{
TreeViewItem itemLevel1 = new TreeViewItem() { Header = "Item Level 1" };
itemLevel1.Items.Add(new TreeViewItem());
rootItem.Items.Add(itemLevel1);
}
treeView.Items.Add(rootItem);
}
private void TreeView_CleanUpVirtualizedItem(object sender, CleanUpVirtualizedItemEventArgs e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
好的,问题是虚拟化仅在TreeView使用Binding时有效,而在像我的示例一样在代码中一个接一个地生成节点时不起作用。真可惜
| 归档时间: |
|
| 查看次数: |
14577 次 |
| 最近记录: |