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

VirtualizingStackPanel.IsVirtualizing="True"


EnableRowVirtualization="True" EnableColumnVirtualization="True".

有人可以说明有什么区别吗?

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

谢谢。

最佳答案

IsVirtualizingEnableRowVirtualization/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.enablerowvirtualizationhttps://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.virtualizingstackpanel.isvirtualizing

09-07 16:54
查看更多