Wpf ListBox中DataGrid的虚拟化
我的布局:Wpf ListBox中DataGrid的虚拟化,wpf,datagrid,listbox,ui-virtualization,nested-controls,Wpf,Datagrid,Listbox,Ui Virtualization,Nested Controls,我的布局: 外部列表框的虚拟化可以工作,但内部数据网格的虚拟化不能工作。可能是因为外部的列表框包含ScrollViewer内部: ScrollViewer提供了一个查看其子内容的窗口。问题是子内容被赋予了无限的虚拟空间。在这个虚拟空间中,DataGrid以完整的大小呈现自己,并显示其所有子项 看起来没有简单的解决方案。 但我甚至想要一个解决办法。也许是为了限制ScrollViewer的虚拟空间?我不确定ScrollViewer是第一个受到指责的人。ListBox使用垂直方向的StackPane
外部
列表框的虚拟化可以工作,但内部数据网格的虚拟化不能工作。可能是因为外部的列表框
包含ScrollViewer
内部:
ScrollViewer
提供了一个查看其子内容的窗口。问题是子内容被赋予了无限的虚拟空间。在这个虚拟空间中,DataGrid
以完整的大小呈现自己,并显示其所有子项
看起来没有简单的解决方案。
但我甚至想要一个解决办法。也许是为了限制ScrollViewer的虚拟空间?我不确定ScrollViewer是第一个受到指责的人。ListBox使用垂直方向的StackPanel作为ItemsPanel。垂直堆叠面板不限制子元素的高度
不要更改容器空间,而是通过设置DataGrid.MaxHeight
来限制DataGrid的大小,StackPanel不会给它超过该限制的高度。然后ScrollViewer将被限制为所有DataGrid的总大小。刚刚在这里找到了类似的答案
您可以尝试固定内部数据网格的高度吗。那样的话,只会显示其中的一部分,并在其中启用滚动。这将允许内部datagrid
的虚拟化,因为一次只渲染其中的一部分,其余部分将在滚动期间动态渲染,这将提高datagrid的
的加载速度
如果有帮助,请通过上面的链接向上投票他的答案尝试设置DataGrid.MaxHeight
。这肯定会限制数据网格的空间。顺便说一句,你是如何发现虚拟化对DG不起作用的?真的,MaxHeight
起作用了,没想到这么简单的东西就能解决这个问题。谢谢请转换为答案,我会标记它。通过呈现单个DataGrid
,在ListBox
中包含10000
行,或不包含该行来检测。