Dado que no hay un método button.PerformClick()
en WPF, ¿hay alguna forma de hacer clic en un botón de WPF programáticamente?¿Cómo hacer clic en un botón de programación en WPF?
Respuesta
WPF tiene un enfoque ligeramente diferente que WinForms aquí. En lugar de tener la automatización de un objeto integrado en la API, tienen una clase separada para cada objeto que es responsable de automatizarlo. En este caso necesita el ButtonAutomationPeer
para realizar esta tarea.
ButtonAutomationPeer peer = new ButtonAutomationPeer(someButton);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();
Here es una publicación de blog sobre el tema.
Nota: La interfaz IInvokeProvider
se define en el ensamblaje UIAutomationProvider
.
Una forma de hacer clic en el botón mediante programación, si tiene acceso a la fuente, es simplemente llamar al controlador de eventos OnClick del botón (o ejecutar el ICommand asociado con el botón, si está haciendo cosas en más WPF-y forma).
¿Por qué haces esto? ¿Estás haciendo algún tipo de prueba automática, por ejemplo, o tratando de realizar la misma acción que el botón realiza desde una sección diferente del código?
No es el único solución a mi problema, pero cuando traté de hacer esto, encontré que no es tan fácil como el botón. PerformClick(), así que es un poco curioso ... :) – tghoang
Tuve que hacer clic en el menú de otra ventana en el mismo proyecto, y MyOtherWindow.mnuEntry_Click (Me, New Windows.RoutedEventArgs) lo hizo. Realmente simple –
Como JaredPar dijo que puede consultar el artículo de Josh Smith sobre Automatización. Sin embargo, si se mira a través de comentarios a su artículo encontrará forma más elegante de eventos de recaudación contra WPF controles
someButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
personalmente prefiero la de arriba en lugar de pares de automatización.
La solución RaiseEvent solo plantea el evento. No ejecuta el comando asociado con el botón (como dice Skanaar) –
Si usa XAML, por ejemplo, , el evento será capturado por el gestor de clics en el modo normal. +1 de mí! – metao
Estoy usando VB ... no estoy seguro si el código es diferente para VB versos C#, pero 'nuevo RoutedEventArgs (Button.ClickEvent)' no funcionó para mí. Tuve que usar 'new RoutedEventArgs (Primitives.ButtonBase.ClickEvent)'. De lo contrario, funciona muy bien! – BrianVPS
si desea llamar haga clic en evento:
SomeButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
Y si desea que el botón parece que se presiona:
typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(SomeButton, new object[] { true });
y sin prensar después de eso:
typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(SomeButton, new object[] { false });
o utilice el ToggleButton
Just Perfect :) gracias por su tiempo y esfuerzo –
this.PowerButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
Como Greg D Dicho esto, creo que una alternativa a Automation
hacer clic en un botón mediante el patrón MVVM (click en caso levantó y se ejecuta el comando) es llamar a la OnClick
método que utiliza la reflexión:
typeof(System.Windows.Controls.Primitives.ButtonBase).GetMethod("OnClick", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(button, new object[0]);
Esta es una buena manera de usar un evento de un elemento hijo para activar un comando en un elemento primario. –
- 1. ¿Cómo hacer clic en un botón en una página web de ASP.NET mediante programación?
- 2. ¿Cómo puedo hacer clic en un control en WPF?
- 3. Botón WPF haga clic en C# código
- 4. ¿Cómo se maneja un botón al hacer clic en Android?
- 5. ¿Cómo hacer un botón de enviar en WPF?
- 6. ¿Cómo hacer que el botón no se pueda hacer clic después de hacer clic en él?
- 7. Cómo deshabilitar el borde del botón WPF al hacer clic en él?
- 8. ¿Cómo hacer un TextBox con un botón dentro de WPF?
- 9. Al hacer clic en un botón con Ruby Mechanize
- 10. Evite hacer doble clic en un botón con knockout.js
- 11. Android resaltar un botón imagen al hacer clic en
- 12. Cómo asociar presionando "enter" con hacer clic en el botón?
- 13. Distinga entre hacer doble clic con el mouse y hacer clic con el mouse en wpf
- 14. Haga clic en un botón en Scrapy
- 15. Cómo hacer clic y arrastrar el botón en Android
- 16. ¿Es posible hacer clic en un botón sin perder el foco en un cuadro de texto?
- 17. ¿Cómo simular un botón hacer clic usando el código?
- 18. Hacer clic mediante programación en las vistas en android
- 19. WPF: Cómo hacer que un fondo de botón sea transparente
- 20. Evento de clic del botón Irregular PNG en WPF
- 21. Cómo convertir un botón WPF. Haga clic en Evento en Observable usando Rx y F #
- 22. Botón de opción de verificación al hacer clic en DIV
- 23. Haga clic en un botón cada segundo
- 24. ¿Cómo puedo hacer un botón invisible, pero que se puede hacer clic en C#
- 25. WPF: hacer que todo el borde haga clic en
- 26. ¿Cómo evitar repetidamente hacer clic en un botón en un formulario?
- 27. ¿Cómo agregar un div al hacer clic en un botón en jquery?
- 28. Ext Js: haga clic en un botón
- 29. ¿Cómo establecer un punto de interrupción al hacer clic en un botón de terceros?
- 30. Botón Deshabilitar en WPF?
Slick, no estaba al tanto de esto. Podría ser muy útil para las pruebas automatizadas. Tenga en cuenta que hay un comentario en ese enlace que sugiere utilizar una fábrica proporcionada para obtener el par de automatización en lugar de crear uno usted mismo. –
Si se trata de un botón ToggleButton: IsChecekd = false/true; parece ser suficiente –
Cambiaría la segunda línea a 'IInvokeProvider invokeProv = (IInvokeProvider) peer.GetPattern (PatternInterface.Invoke);' ya que sabe que este molde siempre debe ser válido. – MEMark