Encaminhando Mouseleftbuttondown Event Programmaticaticamente
-
27-09-2019 - |
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!
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.