Pergunta

Estou tentando demitir manualmente um evento Mouseleftbuttondown em um controle WPF programaticamente, pois estou usando o Microsoft Surface SDK, que não dispara eventos de MouseleftButtondown, mas eventos de contactação. Basicamente, estou tentando empurrar o evento Mouseleftbuttondown para o controle, para disparar o comportamento correto no controle, enquanto lidava com um evento de contactDown.

Acho que tenho que usar o método RaiseEvent no controle para fazer isso com o mousebuttoneventargs, mas estou tendo problemas para descobrir os parâmetros.

Agradeço antecipadamente por sua ajuda!

Foi útil?

Solução

Você pode falsificar eventos de mouse e chaves usando o Win32 Interop. Investigue a função SendInput em Msdn/pinvoke.net.

Observe que isso fará com que o sistema e outros aplicativos pensem que o mouse foi realmente clicado. Se você deseja apenas iniciar um evento WPF, tente RaiseEvent( new RoutedEventArgs( UIElement.MouseLeftButtonDownEvent ) ).

Outras dicas

O desejo de acionar um determinado evento em um controle geralmente é um indicador de um problema de design no código. Os manipuladores de eventos devem gatilho comportamento, não executá -lo. Eu sugeriria que você mova o código que executa a ação desencadeada pelo MouseLeftButtonDown Manipulador de eventos em um método separado. Então o mesmo método pode ser chamado do ContactDown manipulador de eventos.

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

É assim que demiti o evento no meu código de teste.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top