使用虚拟化内部的ScrollViewer WPF的DataGrid(Using virtualiza

2019-10-19 02:41发布

我知道,DataGrid的支持虚拟化,所以只对可见的行创建网格单元。 然而,这似乎只有在数据网格的尺寸限制工作。

在我的情况下,一个DataGrid放置在滚动查看器中,像这样

<ScrollViever>
    <StackPanel>

        <more elements .../>

        <DataGrid ... />

        <more elements .../>

    </StackPanel>
</ScrollViever>

这似乎打破虚拟化。 在DataGrid中应显示大量项目的情况下,可视树变得非常非常大的,即使在外部ScrollViewer中向下滚动之前。

有什么办法来防止数据网格从创建前的所有细胞,而不是让他们创建为ScrollViewer中被向下滚动?

编辑:基本上承载此页面应该像一些文字上方,一张大桌子,并在底部一些文字的网页。 取而代之的是dockview其中顶部/底部总是可见的,只是电网滚动,整个页面应该滚动。 设置达到这一点,但被预先创造了一切困扰。

第二个编辑:有没有一种方法来检测数据网格的特定行被滚动到视图? 典型的懒加载的文章使用DataGrid的 ScrollViewer中进一步的项目添加到网格中,这并不在这里工作。

Answer 1:

是的,你有点回答了自己的问题。 如果你把DataGrid中的ScrollViewer或StackPanel的或者未通过固定约束的DataGrid会打破虚拟化数据网格中的任何控制。

您可以通过给DataGrid.Width和DataGrid.Height修正值解决这个问题。

你需要知道虚拟化的修正值。 虚拟化需要解决的祖先。

这里是你如何给DataGrid的修复大小:

只要身高/ Widht结合的ScrollViewer或网格。

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

           <more elements .../>

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

           <more elements .../>

       </StackPanel>
   </ScrollViever>
<Grid>

这将是它:)



Answer 2:

不要把它放在一个ScrollViewer中,它会只要它希望在那里舒展,这将是它的整体尺寸。



文章来源: Using virtualization for WPF DataGrid inside ScrollViewer