好的,我有一个DataGrid(标准的WPF DataGrid,它带有.Net 4.0,而不是WPF Toolkit DataGrid),CanUserAddRows = false。它绑定到ViewModel中的ObservableCollection。它正确设置了MaxHeight,因此如果屏幕的行太多,它将滚动。
它的工作方式很好,除了用户将鼠标放在DataGrid上然后向下移动滚轮,然后行下方会出现一些额外的空间:
我宁愿在这种情况下不显示灰色空间(不需要滚动)。我该如何做到这一点?
P.S。由于我们程序的一些特殊要求,我实际上为DataGrid底部的新行构建了自己的功能,因此DataGrid底部的空白行。它完全在VM中完成,所以它不应该影响这个问题的答案。
此行为发生在我目前的每个DataGrid上。但是,当在DataGrid上设置MaxHeight时,可以显示的行数多于内容,则内容将开始滚动。在这种情况下,线下方的灰色空间大小可变。也就是说,由于DataGrid基于内容滚动而不是物理滚动(请参阅this for details关于差异,在备注部分下),当你在最后一行的下方有一点额外的空间一直滚动到底部。灰色空间填补了额外的空间。这是一个例子:
为了澄清,我不介意那么多的行为,只是当不需要滚动时出现灰色空间。我只是认为这种行为有助于表明问题的原因。
我发现了可能导致问题的原因:如果将EnableRowVirtualization设置为false,则会出现此问题。 但是,如果我想将其设置为false,如何在不需要滚动时阻止灰色空间/“额外线”发生?(这是我主要关注的问题和要点这个问题)
答案 0 :(得分:1)
你的问题有点不清楚,但我可以提供一些调查步骤来找出原因。
确保您的可观察集合不包含任何空值。集合中的空条目仍将在网格中显示为空行。
事实上,它发生在不同的环境中意味着您的数据源可能不同,因此这是一个检查的好地方。在此处检查集合的计数与网格上的行数(包括空行)直接匹配。
确保这不是控件模板问题。如果可能,请查看Style
控件的DataTemplate
和DataGrid
,看看这是不是视觉副作用。
除此之外,您应该在问题中包含更多详细信息,例如您正在使用的DataGrid
类型(例如WPF Toolkit,Telerik,DevExpress等),以便我们可以排除模板问题
答案 1 :(得分:1)
我遇到了同样的问题,这是由DataGrid
的{{1}}属性未设置为行大小的倍数引起的,因此左侧空间显示在底部MaxHeight
。例如:如果有5行高度为10像素且DataGrid
属性设置为55,那么底部将有5个像素的空间。
答案 2 :(得分:0)
不知怎的,我想这可能是因为DataGrid必须在行边界显示第一个可见行,例如它不能只显示第一个可见行的下半部分,以使最后一行与控件的底部对齐。
您可以通过两个步骤进行测试: 1)滚动到DataGrid的底部,看到额外的灰色空间; 2)垂直缓慢调整DataGrid(或其包含窗口)的大小,看看灰色空间如何变化,同时注意第一个可见行保持不动。
答案 3 :(得分:0)
试试这个:设置
ScrollViewer.CanContentScroll
至False
ScrollViewer.HorizontalScrollBarVisibility
至Disabled
然后
<DataGrid x:Name="myDataGrid"
RowHeaderWidth="{Binding RelativeSource={RelativeSource Self}, Path=RowHeight}"
ScrollViewer.CanContentScroll="False"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Age" Width="*" Binding="{Binding Age}"/>
</DataGrid.Columns>
</DataGrid>
答案 4 :(得分:0)
我也遇到过同样的问题。在我的情况下,底部的额外空间是因为设置了MaxHeight并由于
VirtualizingPanel.ScrollUnit="Item"
设置为
VirtualizingPanel.ScrollUnit="Pixel"
问题实际上消失了(仍然具有MaxHeight属性)
答案 5 :(得分:-1)
我有类似的问题,答案很简单。 您所要做的就是将以下内容放在XAML的数据网格定义中:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding ItemList}"
CanUserAddRows="false"
你很清楚。
另一个类似的问题是,如果您的数据网格中有一个空白列,那么解决方案是将Width =“*”放在XAML中的最后一列定义中。
希望对你有用。
答案 6 :(得分:-1)
Set ScrollViewer.CanContentScroll="False" & ScrollViewer.HorizontalScrollBarVisibility="Disabled" in DataGrid.
答案 7 :(得分:-1)
将ScrollViewer.CanContentScroll
和CanUserAddRows
都设置为false
。