проверить, нажата ли полоса прокрутки двойным щелчком в сетке данных - PullRequest
1 голос
/ 17 января 2012

Мне нужно, чтобы мое приложение выполняло определенное действие при двойном щелчке по 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 Ответ

4 голосов
/ 17 января 2012

Здесь нет необходимости использовать тест на попадание, просто проверьте, есть ли у e.OriginalSource родительский тип ScrollBar, пройдя по визуальному дереву. У этого подхода есть одна потенциальная проблема - ваш элемент пользовательского интерфейса должен быть загружен, что обычно имеет место при работе с событиями мыши в любом случае. Вот код, который проверяет, имеет ли 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;
        }
...