【发布时间】:2011-11-27 23:14:59
【问题描述】:
好的,所以我有一个带有 CanUserAddRows=false 的 DataGrid(标准 WPF DataGrid,.Net 4.0 附带,而不是 WPF Toolkit DataGrid)。它绑定到 ViewModel 中的 ObservableCollection。它有一个正确设置的 MaxHeight,因此如果屏幕上的行太多,它会滚动。
它工作得很好,除了如果用户将鼠标放在 DataGrid 上然后向下移动滚轮,那么行下方会出现一些额外的空间:
我宁愿在这种情况下不出现灰色空间(无需滚动)。我该如何做到这一点?
附:由于我们程序的一些特殊要求,我实际上已经为DataGrid 底部的新行构建了自己的功能,因此DataGrid 底部的空白行。完全是在虚拟机中完成的,所以应该不会影响这个问题的答案。
更新:
这种行为发生在我目前拥有的每个DataGrid 上。但是,当在DataGrid 上设置了 MaxHeight,并且行数超过了可以显示的行数时,内容就会开始滚动。在这种情况下,线条下方的灰色空间的大小是可变的。也就是说,由于DataGrid基于内容滚动而不是物理滚动(请参阅this for details关于差异,在备注部分下),当您一直滚动时,最后一行下方的底部会有一点额外的空间至底部。灰色空间填补了额外的空间。这是一个例子:
为了澄清,我不太介意这种行为,只是在不需要滚动时出现灰色空间。我只是认为这种行为有助于指出问题的原因。
更新 #2:
我发现了可能导致问题的原因:如果将 EnableRowVirtualization 设置为 false,则会出现此问题。 但是,如果我想将其设置为false,如何防止在不需要滚动时出现灰色空间/“额外线”?(这是我的主要关注点和要点这个问题)
【问题讨论】:
-
它实际上发生在我家里的机器上,而不是我工作的机器上。很高兴我不是唯一一个看到这个的人?
-
嗯。我注意到它有点反复无常......虽然我通常可以最终实现它。不完全确定它取决于什么......
-
如果您尝试将数据网格设置为只读会怎样。那么它还在发生吗?
-
嗯...经过快速测试 - 是的,当我为 DataGrid 设置 IsReadOnly="True" 时,它仍然会发生。在这种情况下,这意味着什么?设置该属性后,我仍然可以编辑 DataGrid。
-
我会尝试创建一个简单的
List并将其分配给ItemsSource。只是为了完全确保这与 ViewModel 及其修改(也许,异步和其他东西)无关。