如何在WPF C#中禁用DataGrid内部的滚动?

12

我将VerticalScrollBarVisibility的值设为“Disabled”,因为我不想看到超过指定高度的datagrid内部内容。在执行以上语句后,我无法看到滚动条,但我仍然可以向下滚动并查看行。请问有人能告诉我如何完全禁用滚动吗?谢谢。

5个回答

7
正确的方法是禁用点击目标。
DataGrid.IsHitTestVisible = false;

9
这个方法是可行的,但如果你希望能够在数据表格内部实际点击某些内容(而不是仅仅忽略鼠标滚轮),那么这个方法就无法解决问题了。 - CJBrew
5
它还禁止点击行。 - Sasino

7

一旦您禁用了DatGrid的VerticalScrollBarVisibility,您需要像这样禁用ScrollViewer的滚动功能:

ScrollViewer.CanContentScroll="False"

但是在这样做之前,请确保您已经为整个DataGrid和DataGrid行定义了标准高度,以便用户可以看到您想要他们看到的所有行,否则被剪掉的行将不会显示,用户无法向下滚动以查看它们。

希望这有所帮助。


3

允许 DataGrid 显示所有内容(因此不需要滚动条):

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <DataGrid x:Name="DataGrid" />
</Grid>

你可以将结果放在任何地方。它将缩小到所有者的尺寸。

这并不能解决问题,尤其是当数据表格有许多行时。 - busssard

2

对我来说,已接受的解决方案并不适用,因为我需要行选择。通过禁用数据网格平移(用于鼠标拖动)并处理键按下事件(用于键盘),我解决了所有问题。

在数据网格 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;
}

希望有所帮助。

编辑:我的回答适用于列,但对于行也是类似的。


0

我想补充一个关于列的答案。有时候,你可能会发现Datagrid会滚动到额外的列上,尤其是如果高度被调整为任何其他的额外列都不可见的情况下。我只需要在Datagrid上附加一个Loaded处理程序,将所有额外的列设置为0宽度并隐藏它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接