Frage

Ich versuche, manuell ein Mouseleftbuttondown-Ereignis auf einem WPF-Steuerelement programmgesteuert zu schießen, wie ich das Microsoft Surface SDK verwenden, die nicht Mouseleftbuttondown-Ereignisse ausgelöst, aber ContactDown Ereignisse. Im Grunde bin ich versucht, das Ereignis Mouseleftbuttondown bis auf die Kontrolle, abzufeuern das richtige Verhalten auf der Steuerung zu drücken, während ein ContactDown Event-Handling.

Ich vermute, ich muss irgendwie die Raise Methode auf dem Steuerelement verwenden, das mit MouseButtonEventArgs zu tun, aber ich habe einige Probleme, die Parameter herauszufinden.

Vielen Dank im Voraus für Ihre Hilfe!

War es hilfreich?

Lösung

können Sie fälschen Maus- und Tastaturereignisse Win32 Interop verwenden. Untersuchen Sie die Funktion Send auf MSDN / pinvoke.net .

Beachten Sie, dass dies das System und andere Anwendungen bewirkt, dass die Maus denken, wurde tatsächlich angeklickt. Wenn Sie nur ein WPF-Ereignis initiieren wollen, versuchen RaiseEvent( new RoutedEventArgs( UIElement.MouseLeftButtonDownEvent ) ).

Andere Tipps

Der Wunsch, ein bestimmtes Ereignis in einem Steuer auszulösen ist sehr oft ein Indikator für ein Designproblem im Code. Event-Handler sollte Trigger-Verhalten, führen Sie es nicht . Ich würde vorschlagen, dass Sie den Code bewegen, dass die Aktion führt durch die MouseLeftButtonDown Event-Handler in eine separate Methode ausgelöst. Dann kann das gleiche Verfahren aus dem ContactDown Ereignishandler aufgerufen werden.

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,
   };

Dies ist, wie ich das Ereignis in meinem Testcode ausgelöst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top