防止DataGrid滚动时捕捉到行

6
我有一个DataGrid,在每一行中都包含一个ItemsControl。因此,网格的行可能非常高。如果一行高于网格的高度,则无法滚动以查看其余部分,因为DataGrid会自动滚动到下一行。也就是说,如果我正在查看第1行的上半部分,并单击垂直滚动条的向下箭头,则会跳转到第2行的顶部。它不允许我查看第1行的下半部分。如何使DataGrid平稳地滚动而不是逐行滚动?
2个回答

8

看起来您想禁用虚拟化。要这样做,只需将ScrollViewerCanContentScroll设置为False即可。但是,如果您在DataGrid中有很多数据,则在关闭虚拟化后,所有DataGridRows将一次性生成,而不是当它们实际对用户可见时,这可能会导致速度变慢。

<DataGrid ...
          ScrollViewer.CanContentScroll="False">

感谢@Meleak。我之前尝试过这个方法,但它并没有改变什么,但这次却奏效了。我不想禁用虚拟化,但如果我想看到整行的话,我还有什么选择呢?听起来像是DataGrid的一个bug。说到这里,将CanContentScroll更改为false也会导致我的前29行在加载网格时第一次无法正确布局。行无法垂直扩展以适应其内容。如果我单击按钮进行第二次加载,则会正确显示。 - xr280xr
我还没有找到启用虚拟化的“平滑滚动”的方法。关于29行未正确加载的问题,听起来像是您遇到的奇怪错误。您能否发布一些可以重现此问题的代码? - Fredrik Hedblad

7

我遇到了一个问题,滚动会固定在行上。然后我发现了这个链接:https://dev59.com/S2Yr5IYBdhLWcg3wy9OA#13384164

<Datagrid ..
            VirtualizingPanel.ScrollUnit="Pixel"

基本上,这将使滚动对齐像素而不是项目。这将提供平滑的滚动体验。

当您需要虚拟化时,这是正确的选择。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接