.net - 检查数据网格中的双击是否单击了滚动条

标签 .net wpf datagrid double-click hittest

我需要我的应用程序在双击 DataGrid 时执行特定操作。如果双击滚动条,则不应执行该操作。所以我尝试看看双击了什么:

private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            Point p = Mouse.GetPosition(this.DataGrid1);
            IInputElement ie = this.DataGrid1.InputHitTest(p);
        }

但是当我双击滚动条时,IInputElement 似乎是各种各样的东西: Microsoft.Windows.Themes.ScrollChrome 或 System.Windows.Shapes.Rectangle 。所以我不确定我是否单击了滚动条。

那么如何检查我是否真的双击了滚动条?

最佳答案

这里不需要使用 HitTest ,只需通过遍历可视化树来检查 e.OriginalSource 是否具有 ScrollBar 类型的父级即可。这种方法有一个潜在的问题 - 必须加载 UI 元素,这通常是处理鼠标事件时的情况。这是检查 UIElement 是否具有特定类型的父级的代码。

public static T GetParentOfType<T>(DependencyObject current)
          where T : DependencyObject
        {
            for (DependencyObject parent = VisualTreeHelper.GetParent(current);
                parent != null;
                parent = VisualTreeHelper.GetParent(parent))
            {
                T result = parent as T;

                if (result != null)
                    return result;
            }

            return null;
        }

关于.net - 检查数据网格中的双击是否单击了滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893263/

相关文章:

c# - 在 Visual Studio 中执行查询时出错

.net - 为什么并发 GC 有时会导致 ExecutionEngineException(根据 MSDN)?

c# - 如何更改按钮上的鼠标光标?

c# - 编译时禁用 Dll 文化文件夹

.net - WPF工具包Datagrid-自定义选项卡

wpf - 当 DataGrid 绑定(bind)到 DataTable 时,如何使用 MVVM 在 WPF 中选择 DataGrid 行

.net - Redis 副本处理失败的连接字符串

c# - set的封装更有效

c# - 为 xaml 中的第一列启用 DataGrid 排序

c# - Web 应用程序在 Visual Studio 和 Azure 上显示不同的屏幕