检查是否在datagrid中双击滚动条

时间:2012-01-17 10:44:53

标签: .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。所以我不确定是否点击了滚动条。

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

1 个答案:

答案 0 :(得分:4)

此处无需使用点击测试,只需通过遍历可视树检查e.OriginalSource是否具有ScrollBar类型的父级。这种方法存在一个潜在的问题 - 必须加载您的UI元素,这通常是处理鼠标事件时的情况。 Heres'检查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;
        }