5

我最近开始探索 WPF 中的数据和 UI 虚拟化功能,并偶然发现了一些奇怪的东西。

我创建了一个启用的DataGrid'sVirtualizing并用一个包含 1,000,000 个项目的列表填充它。这很好用,而且速度惊人。

<Grid>
    <DataGrid x:Name="employees" VirtualizingPanel.IsVirtualizing="True" 
                                 VirtualizingPanel.IsContainerVirtualizable="True"
                                 VirtualizingPanel.VirtualizationMode="Recycling"/>
</Grid>

但是,当我将它嵌套在 a 下时,StackPanel它会加载超过一分钟,直到我得到OutOfMemoryException. 我也设置了相同的VirtualizingPanel属性,StackPanel但它没有帮助。

这种行为是故意的还是我在这里遗漏了一些基本的东西?以及如何设法在嵌套控件中支持数据虚拟化?

4

1 回答 1

10

aStackPanel是一个“无限容器”(注意引号),因为它不会像 aGridDockPanel那样对其子项的大小施加限制。

这在 UI 虚拟化方面意味着,由于您DataGrid不受限制Height,它将无休止地增长并渲染所有项目,从而有效地失去 UI 虚拟化。

有关详细信息,请参阅MSDN:WPF 布局。

最重要的是,您需要确保使用适当的布局容器,具体取决于您的需要。

于 2013-12-18T15:07:17.580 回答