好的,我有一个DataGrid(标准WPF DataGrid,随带 .Net 4.0,而不是 WPF Toolkit DataGrid),CanUserAddRows=false。它绑定到ViewModel中的ObservableCollection。它已经正确设置了MaxHeight,因此如果屏幕上有太多行,则会滚动。
附注:由于我们程序的一些特殊要求,我实际上已经为DataGrid底部的新行构建了自己的功能,因此DataGrid底部有一个空白行。它完全在VM中完成,因此不应影响此问题的答案。
更新:
这种行为发生在我目前拥有的每个 DataGrid 上。但是,当设置了 DataGrid 的 MaxHeight,并且有更多的行无法显示时,内容开始滚动。在这种情况下,行下面的灰色空间大小是可变的。也就是说,由于 DataGrid 基于内容而不是物理滚动进行滚动(有关差异的详细信息,请参见 this for details 中的备注部分),因此当您滚动到底部时,最后一行下方会有一点额外的空间。灰色空间填充了该额外空间。以下是一个示例:
更新#2:
我发现了什么可以导致这个问题:如果将EnableRowVirtualization设置为false,则会出现这个问题。然而,如果我想将其设置为false,如何防止在没有滚动的情况下出现灰色空间/“额外行”?(这是我的主要关注点和这个问题的主要内容)
它现在的工作方式很好,除了一个问题,即如果用户将鼠标放在DataGrid上,然后向下移动滚轮,那么一些额外的空间会出现在行下方:
附注:由于我们程序的一些特殊要求,我实际上已经为DataGrid底部的新行构建了自己的功能,因此DataGrid底部有一个空白行。它完全在VM中完成,因此不应影响此问题的答案。
更新:
这种行为发生在我目前拥有的每个 DataGrid 上。但是,当设置了 DataGrid 的 MaxHeight,并且有更多的行无法显示时,内容开始滚动。在这种情况下,行下面的灰色空间大小是可变的。也就是说,由于 DataGrid 基于内容而不是物理滚动进行滚动(有关差异的详细信息,请参见 this for details 中的备注部分),因此当您滚动到底部时,最后一行下方会有一点额外的空间。灰色空间填充了该额外空间。以下是一个示例:
更新#2:
我发现了什么可以导致这个问题:如果将EnableRowVirtualization设置为false,则会出现这个问题。然而,如果我想将其设置为false,如何防止在没有滚动的情况下出现灰色空间/“额外行”?(这是我的主要关注点和这个问题的主要内容)
List
并将其分配给ItemsSource
。只是为了确保这与ViewModel及其修改无关(可能是异步和其他东西)。 - Pavel Gatilov