几乎没有关于设置影响的信息;
VirtualizingStackPanel.IsVirtualizing="True"
和
EnableRowVirtualization="True" EnableColumnVirtualization="True".
有人可以澄清区别是什么吗?
另外,作为额外的奖励,任何人都可以澄清EnableRowVirtualization和EnableColumnVirtualization是否在3.5网格上实际执行任何操作,因为MSDN文档仅将这些属性列为4.0,但它们肯定存在于3.5?
感谢。
答案 0 :(得分:10)
IsVirtualizing
和EnableRowVirtualization
/ EnableColumnVirtualization
都遵循相同的原则,即只有在需要时才会显示项目,并且会重复使用容器。
基本上,Panel
(或Grid
)会跟踪可见内容,如果更改,则会使用内部类'ItemContainerGenerator'
来调整和构建新项目( http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.aspx)。
两者的动机是容器只是按需生成,从而节省了内存并提高了性能。
至于为什么有两个:Panel
被设计为仅在单一方向上延伸,水平或垂直;所以他们为它实现了一个附加属性。另一方面,Grid
以二维方式扩展,因此它们为每个维度实现了一个属性。
另一个区别是学术上的:IsVirtualizing
是附加属性,而Grid
的对应属性是本机属性。不知道为什么他们选择了这种差异......
相关链接为http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.enablerowvirtualization(v=vs.100).aspx和http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.isvirtualizing.aspx