外部作品的虚拟化,ListBox但内部作品DataGrid没有。可能是因为外部ListBox包含ScrollViewer内部:
提供了一个关于
ScrollViewer其子内容的窗口。问题是子内容被赋予了无限的虚拟空间。在这个虚拟空间中,DataGrid它以全尺寸呈现自身,并显示其所有子项。
看起来没有简单的解决方案。
但我什至想要一个解决方法。也许以某种方式限制外部的虚拟ScrollViewer空间?
外部作品的虚拟化,ListBox但内部作品DataGrid没有。可能是因为外部ListBox包含ScrollViewer内部:
提供了一个关于
ScrollViewer其子内容的窗口。问题是子内容被赋予了无限的虚拟空间。在这个虚拟空间中,DataGrid它以全尺寸呈现自身,并显示其所有子项。
看起来没有简单的解决方案。
但我什至想要一个解决方法。也许以某种方式限制外部的虚拟ScrollViewer空间?
我不确定 ScrollViewer 是第一个受到指责的人。ListBox 使用具有垂直方向的 StackPanel 作为 ItemsPanel。垂直 StackPanel 不限制子元素的高度。
而不是更改容器空间,而是通过设置限制 DataGrid 大小DataGrid.MaxHeight,并且 StackPanel 不会给它比该限制更多的高度。然后 ScrollViewer 将被限制为所有 DataGrid 的总大小。
刚刚在DataGrid 虚拟化中的 DataGrid 中找到了类似的答案
你可以尝试修复
height内部的datagrid。这样,只有其中一部分会在启用滚动的情况下显示。这将允许内部虚拟化,datagrid因为一次只渲染一部分,其余部分将在滚动期间动态渲染,这将提高datagrid's加载速度。
如果有帮助,请通过上面的链接并支持他的回答