Событие MouseLeftButtonDown запускается программно - PullRequest
8 голосов
/ 14 июня 2010

Я пытаюсь вручную запустить событие MouseLeftButtonDown на элементе управления WPF, поскольку я использую Microsoft Surface SDK, который запускает не события MouseLeftButtonDown, а события ContactDown.По сути, я пытаюсь передать событие MouseLeftButtonDown в элемент управления, чтобы запустить корректное поведение элемента управления при обработке события ContactDown.

Я предполагаю, что мне нужно каким-то образом использовать метод RaiseEvent дляэлемент управления, чтобы сделать это с помощью MouseButtonEventArgs, но у меня возникли проблемы с определением параметров.

Заранее спасибо за вашу помощь!

Ответы [ 3 ]

5 голосов
/ 14 июня 2010

Вы можете подделать события мыши и ключа, используя взаимодействие Win32.Исследуйте функцию SendInput на MSDN / pinvoke.net .

Обратите внимание, что это заставит систему и другие приложения думать, что мышь действительно нажата.Если вы просто хотите инициировать событие WPF, попробуйте RaiseEvent( new RoutedEventArgs( UIElement.MouseLeftButtonDownEvent ) ).

2 голосов
/ 15 декабря 2011
var grid = new Grid();            

int timestamp = new TimeSpan(DateTime.Now.Ticks).Milliseconds;
const MouseButton mouseButton = MouseButton.Left;
var mouseDownEvent =
   new MouseButtonEventArgs(Mouse.PrimaryDevice, timestamp, mouseButton) {
       RoutedEvent = UIElement.MouseLeftButtonDownEvent,
       Source = grid,
   };

Так я запускаю событие в своем тестовом коде.

2 голосов
/ 14 июня 2010

Желание инициировать определенное событие в элементе управления часто является индикатором проблемы проектирования в коде. Обработчики событий должны запускать поведение, а не выполнять его . Я бы посоветовал вам переместить код, выполняющий действие, запускаемое обработчиком события MouseLeftButtonDown, в отдельный метод. Затем тот же метод может быть вызван из обработчика событий ContactDown.

...