几乎没有关于设置影响的信息。
VirtualizingStackPanel.IsVirtualizing="True"
和
EnableRowVirtualization="True" EnableColumnVirtualization="True".
有人可以说明有什么区别吗?
另外,作为额外的好处,任何人都可以澄清EnableRowVirtualization和EnableColumnVirtualization是否实际上在3.5网格上做任何事情,因为MSDN文档仅列出了这些属性回到4.0,但它们肯定存在于3.5中?
谢谢。
最佳答案
IsVirtualizing
和EnableRowVirtualization
/EnableColumnVirtualization
都遵循相同的原理,即仅在需要时才可视化项目,并且容器可以重复使用。
本质上,Panel
(或Grid
)跟踪可见的内容,如果更改,它将使用内部类'ItemContainerGenerator'
来调整大小并构建新项目(https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.itemcontainergenerator)。
两者的动机都是仅根据需要生成容器,从而节省了内存并提高了性能。
关于为什么有两个:Panel
设计为仅在单个方向(水平或垂直)上延伸;因此他们为其实现了一个附加属性。另一方面,Grid
在两个维度上扩展,因此他们为每个维度实现了一个属性。
另一个区别是学术上的:IsVirtualizing
是一个附加属性,而Grid
的对应属性是 native 属性。他们为什么选择这种差异没有任何线索。
相关链接为https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagrid.enablerowvirtualization和https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.virtualizingstackpanel.isvirtualizing