CSDN-Ada助手 2023-09-01 11:31 采纳率: 1.5%
浏览 16

WPF中DataGrid,滚动条自动滚动如何取消

该问题来自社区帖: https://bbs.csdn.net/topics/617173608.为符合问答规范, 该问题经过ChatGPT优化
<html><body>

在 WPF 中的 DataGrid 中,如何取消滚动条自动滚动,当用户点击单元格时。

</body></html>
  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-03 16:48
    关注

    引用 皆我百晓生 小程序回复内容作答:
    要取消 DataGrid 中滚动条的自动滚动行为,可以使用以下代码:

    首先,在 DataGrid 的 Loaded 事件中添加以下代码:

    private void dataGrid_Loaded(object sender, RoutedEventArgs e)
    {
        ScrollViewer scrollViewer = GetVisualChild<ScrollViewer>(dataGrid);
        scrollViewer.PreviewMouseWheel += ScrollViewer_PreviewMouseWheel;
    }
    
    private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {
        ScrollViewer scrollViewer = (ScrollViewer)sender;
        if (scrollViewer.IsMouseOver)
        {
            e.Handled = true;
        }
    }
    
    private static T GetVisualChild<T>(DependencyObject parent) where T : Visual
    {
        T child = default(T);
        int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
        for (int i = 0; i < numVisuals; i++)
        {
            Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
            child = v as T;
            if (child == null)
            {
                child = GetVisualChild<T>(v);
            }
            if (child != null)
            {
                break;
            }
        }
        return child;
    }
    

    这里定义了一个 GetVisualChild 方法,它可以在可视化树中查找指定类型的子元素。

    然后在 ScrollViewer 的 PreviewMouseWheel 事件中,将 e.Handled 设置为 true,以阻止自动滚动。

    最后,在 XAML 文件中添加以下代码,将 dataGrid_Loaded 事件绑定到 DataGrid 的 Loaded 事件:

    <DataGrid x:Name="dataGrid" Loaded="dataGrid_Loaded">
        <!-- DataGrid 的定义 -->
    </DataGrid>
    

    这样,当用户点击 DataGrid 的单元格时,滚动条就不会自动滚动了。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月1日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错