получение интервала таймера двойного щелчка системы в WPF (значение из панели управления) - PullRequest
6 голосов
/ 27 января 2011

У меня есть FrameworkElement, и я хочу выполнить действие A, когда пользователь нажимает один раз, и действие B, когда пользователь выполняет двойной щелчок.

Из-за способа доставки событий я всегда получаю событие одного щелчка, которое начинает действие A. После осмотра я нашел интересную технику здесь , использующую таймер для задержки обработка кликов. Однако этот пример жестко кодирует таймер до 300 миллисекунд, но я бы предпочел использовать пользовательскую настройку «Скорость двойного щелчка» в диалоговом окне «Свойства мыши» панели управления.

Что такое API wpf / C # для получения этого значения из системы?

Ответы [ 4 ]

9 голосов
/ 27 января 2011

Вы можете найти время здесь: System.Windows.Forms.SystemInformation.DoubleClickTime

Вы можете увидеть полную реализацию того, чего вы пытаетесь достичь, здесь:

WPF: одиночный щелчок по кнопке + двойной щелчок

4 голосов
/ 26 августа 2017

Если вы не хотите ссылочную сборку System.Windows.Forms, вы можете попробовать это:

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern int GetDoubleClickTime();
3 голосов
/ 27 января 2011

Это должно работать SystemInformation.DoubleClickTime

0 голосов
/ 22 марта 2018

У меня есть FrameworkElement, и я хочу выполнить действие A, когда пользователь одиночные щелчки и действие B, когда пользователь дважды щелкает.

Если вы обрабатываете событие, которое предоставляет MouseButtonEventArgs, например UIElement.MouseLeftButtonDown, вы можете получить доступ к MouseButtonEventArgs.ClickCount, чтобы определить, произошло ли несколько щелчков за время двойного щелчка друг друга. Поскольку FrameworkElement происходит от UIElement, это должно быть возможно в вашем случае.

Нет необходимости использовать DllImport или WinForms, так как вам действительно не нужно знать время двойного щелчка для достижения вашей главной цели.

Редактировать добавление: я обнаружил, что это действительно работает только для событий ButtonDown (слева или справа). Я не уверен, почему они не реализовали это должным образом для событий ButtonUp, но этого должно быть достаточно, чтобы перехватить оба события и сохранить переменную-член ClickCount из ButtonDown, которую можно проверить при получении ButtonUp.

...