我将VerticalScrollBarVisibility的值设为“Disabled”,因为我不想看到超过指定高度的datagrid内部内容。在执行以上语句后,我无法看到滚动条,但我仍然可以向下滚动并查看行。请问有人能告诉我如何完全禁用滚动吗?谢谢。
我将VerticalScrollBarVisibility的值设为“Disabled”,因为我不想看到超过指定高度的datagrid内部内容。在执行以上语句后,我无法看到滚动条,但我仍然可以向下滚动并查看行。请问有人能告诉我如何完全禁用滚动吗?谢谢。
DataGrid.IsHitTestVisible = false;
一旦您禁用了DatGrid的VerticalScrollBarVisibility
,您需要像这样禁用ScrollViewer的滚动功能:
ScrollViewer.CanContentScroll="False"
但是在这样做之前,请确保您已经为整个DataGrid和DataGrid行定义了标准高度,以便用户可以看到您想要他们看到的所有行,否则被剪掉的行将不会显示,用户无法向下滚动以查看它们。
希望这有所帮助。
允许 DataGrid 显示所有内容(因此不需要滚动条):
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<DataGrid x:Name="DataGrid" />
</Grid>
对我来说,已接受的解决方案并不适用,因为我需要行选择。通过禁用数据网格平移(用于鼠标拖动)并处理键按下事件(用于键盘),我解决了所有问题。
在数据网格 XAML 中:
ScrollViewer.PanningMode="None"
并且:
PreviewKeyDown="OnDatagridPreviewKeyDown"
private void OnDatagridPreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Right || e.Key == Key.Left)
e.Handled = true;
}
希望有所帮助。
编辑:我的回答适用于列,但对于行也是类似的。
我想补充一个关于列的答案。有时候,你可能会发现Datagrid会滚动到额外的列上,尤其是如果高度被调整为任何其他的额外列都不可见的情况下。我只需要在Datagrid上附加一个Loaded处理程序,将所有额外的列设置为0宽度并隐藏它们。