好的,所以我有一个带有 CanUserAddRows=false的DataGrid(标准 WPF DataGrid,它随 .Net 4.0 一起提供,而不是 WPF Toolkit DataGrid)。它绑定到 ViewModel 中的 ObservableCollection。它正确设置了 MaxHeight,以便在屏幕行数过多时滚动。
它的工作方式很好,除了如果用户将鼠标放在 DataGrid 上然后向下移动滚轮,那么行下方会出现一些额外的空间:

我宁愿在这种情况下不出现灰色空间(无需滚动)。我该如何实现?
PS由于我们程序的一些特殊要求,我实际上已经为DataGrid底部的新行构建了自己的功能,因此DataGrid底部的空白行。它完全在 VM 中完成,所以它不应该影响这个问题的答案。
这种行为发生在我目前拥有的每个DataGrid 上。然而,当maxHeight设置在DataGrid中,有更多的行相比,可以显示出来,那么内容开始滚动。在这种情况下,线条下方的灰色空间的大小是可变的。也就是说,由于DataGrid基于内容而不是物理滚动滚动(有关差异的详细信息,请参阅此内容,在备注部分下),当您一直滚动到底部。灰色空间填充了额外的空间。下面是一个例子:

澄清一下,我不太介意这种行为,只是当不需要滚动时出现灰色空间。我只是认为这种行为将有助于指出问题的原因。
我发现了可能导致问题的原因:如果将 EnableRowVirtualization 设置为 false,则会出现此问题。 但是,如果我想将其设置为 false,在不需要滚动时如何防止出现灰色空间/“额外行”?(这是我的主要关注点,也是这个问题的重点)
小智 5
我也遇到过同样的问题。就我而言,底部的额外空间是因为设置了 MaxHeight 并且因为
VirtualizingPanel.ScrollUnit="Item"
Run Code Online (Sandbox Code Playgroud)
设置为之后
VirtualizingPanel.ScrollUnit="Pixel"
Run Code Online (Sandbox Code Playgroud)
问题实际上消失了(仍然具有 MaxHeight 属性)
您的问题有点不清楚,但我可以提供一些调查步骤来找出原因。
确保您的可观察集合不包含任何空值。集合中的空条目仍将在网格中显示为空白行。
事实上,它发生在不同的环境中意味着您的数据源可能不同,因此这是一个检查的好地方。这里检查集合的计数是否与网格上的行数(包括空行)直接匹配。
确保这不是控制模板问题。如果可能,请查看您的控件的Style和,看看这是否不是视觉副作用。DataTemplateDataGrid
除此之外,您应该在问题中包含更多详细信息,例如DataGrid您正在使用的类型(例如 WPF Toolkit、Telerik、DevExpress 等),以便我们可以排除模板问题。