11

几乎没有关于设置影响的信息。

VirtualizingStackPanel.IsVirtualizing="True" 

EnableRowVirtualization="True" EnableColumnVirtualization="True". 

有人可以澄清一下有什么区别吗?

此外,作为额外的奖励,任何人都可以澄清 EnableRowVirtualization 和 EnableColumnVirtualization 是否真的在 3.5 网格上做任何事情,因为 MSDN 文档仅将这些属性列出回 4.0,但它们肯定存在于 3.5 中?

谢谢。

4

1 回答 1

11

IsVirtualizingEnableRowVirtualization/都EnableColumnVirtualization遵循相同的原则,即仅在需要时才可视化项目并重复使用容器。

本质上,Panel(or Grid) 跟踪可见的内容,如果更改,它使用内部类 ,'ItemContainerGenerator'来调整和构建新项目 ( https://docs.microsoft.com/en-us/dotnet/api/ system.windows.controls.itemcontainergenerator)。

两者的动机是容器仅按需生成,从而节省内存并提高性能。

至于为什么有两个:Panel设计为仅在一个方向上延伸,水平或垂直;所以他们为它实现了一个附加属性。Grid另一方面, A在两个维度上扩展,因此他们为每个维度实现了一个属性。

另一个区别是学术性的: IsVirtualizing是附加属性,而它的对应物Grid是本机属性。不知道他们为什么选择这种差异......

相关链接是https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagrid.enablerowvirtualizationhttps://docs.microsoft.com/en-us/dotnet/api/system .windows.controls.virtualizingstackpanel.isvirtualizing

于 2013-09-24T09:11:48.887 回答