gpt4 book ai didi

wpf - 在 ScrollViewer 中对 WPF DataGrid 使用虚拟化

转载 作者:行者123 更新时间:2023-12-05 05:27:17 25 4
gpt4 key购买 nike

我知道 DataGrid 支持虚拟化,因此它仅为可见行创建网格单元。但是,这似乎只有在 DataGrid 的大小受到限制时才有效。

在我的场景中,DataGrid 被放置在滚动查看器中,就像这样

<ScrollViever>
<StackPanel>

<more elements .../>

<DataGrid ... />

<more elements .../>

</StackPanel>
</ScrollViever>

这似乎破坏了虚拟化。在 DataGrid 应显示大量项目的情况下,可视树会变得非常非常大,甚至在外部 ScrollViewer 中向下滚动之前也是如此。

有什么方法可以防止 DataGrid 预先创建所有单元格,而是在 ScrollViewer 向下滚动时创建它们?

编辑:基本上托管它的页面应该像一个网页,顶部有一些文本,一个大表格,底部有更多文本。而不是顶部/底部始终可见并且只有网格滚动的停靠 View ,整个页面应该滚动。该设置实现了这一点,但会受到预先创建的一切的影响。

另一个编辑:有没有办法检测到数据网格的特定行已滚动到 View 中?典型的延迟加载文章使用datagrid 的 scrollviewer 将更多项目添加到网格,这在这里不起作用。

最佳答案

是的,您有点回答了您自己的问题。如果您将 DataGrid 放在 ScrollViewer 或 StackPanel 或任何未将修复约束传递给 DataGrid 的控件中,它将破坏 DataGrid 中的虚拟化。

您可以通过给 DataGrid.Width 和 DataGrid.Height 固定值来解决这个问题。

您需要了解虚拟化的这些固定值。虚拟化需要修复祖先。

这里是您可以给 DataGrid 固定大小的方法:

只需将 Height/Widht 绑定(bind)到 ScrollViewer 或 Grid。

<Grid x:Name="grid" >
<ScrollViever>
<StackPanel>

<more elements .../>

<DataGrid Width={Binding ElementName=grid, Path=Width..} Height={Binding ElementName...} />

<more elements .../>

</StackPanel>
</ScrollViever>
<Grid>

就是这样:)

关于wpf - 在 ScrollViewer 中对 WPF DataGrid 使用虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20420457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com