Pregunta

Estoy tratando de disparar manualmente un evento MouseLeftButtonDown en un control de WPF mediante programación, como yo estoy usando el SDK de Microsoft Surface, que no se activa eventos MouseLeftButtonDown, pero los acontecimientos ContactDown. Básicamente estoy tratando de empujar el evento MouseLeftButtonDown hasta el control, a fuego fuera el comportamiento correcto en el control, mientras que el manejo de un evento ContactDown.

supongo que tengo que usar alguna manera el método RaiseEvent en el mando a hacer esto con MouseButtonEventArgs, pero estoy teniendo algunos problemas para averiguar los parámetros.

Gracias de antemano por su ayuda!

¿Fue útil?

Solución

Puede suplantar ratón y la tecla eventos usando Win32 interoperabilidad. Investigar la función de MSDN / pinvoke.net .

Tenga en cuenta que esto hará que el sistema y otras aplicaciones que piensan que el ratón fue hecho clic. Si lo que desea es iniciar un evento de WPF, tratar RaiseEvent( new RoutedEventArgs( UIElement.MouseLeftButtonDownEvent ) ).

Otros consejos

El deseo de desencadenar un evento determinado en un control es muy a menudo un indicador de un problema de diseño en el código. Los controladores de eventos deben comportamiento de disparo, no realizarla . Yo sugeriría que se mueve el código que realiza la acción activada por el controlador de eventos MouseLeftButtonDown en un método separado. A continuación, el mismo método puede ser llamado desde el controlador de eventos ContactDown.

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

Esta es la forma en que desencadenará el evento en mi código prueba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top