Me di cuenta de que cuando se usa una InvokeCommandAcction asociada a un EventTrigger, el evento original todavía enrutaba hasta los elementos principales hasta que se manejara. Bueno, supongo que es un comportamiento esperado. Pero mi pregunta es cómo puedo marcar el evento como Handled para que no se propague a través de todo el árbol de UI.¿Cómo evitar que InvokeCommandAction propague eventos a elementos principales?
En realidad, como maneja este evento en un comando, todo se manejará en este comando, por lo tanto, no necesita propagarse. Y en un caso de esquina que encontré, causa un comportamiento no deseado. Por ejemplo, abro una nueva ventana cuando un usuario hace doble clic en un elemento (evento MouseDoubleClick). El problema es que se abren las nuevas ventanas y luego la ventana principal vuelve al frente de la nueva porque el evento MouseDoubleClick acaba de llegar al elemento superior en el árbol de la interfaz de usuario. El comportamiento deseado sería mantener la nueva ventana al frente, pero como InvokeCommandAction permite que el evento se propague, la ventana principal recupera el foco ...
Lo que podría hacer es usar el elemento CallMethodAction en su lugar pero como Estoy en un escenario MVVM, no quiero argumentos de evento UI en mi código. Incluso si esto me permite marcar implícitamente el evento como manejado y solucionar el problema.
<UserControl x:Class="..."
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding Path=DisplayReportCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
...
</UserControl>
Esto parece ser una muy buena idea. Esperaré por más respuestas. Gracias. – Ucodia
Escogí esta respuesta porque es la solución más limpia que puedo usar en un escenario de MVVM. – Ucodia
Para Windows Phone, en lugar de RoutedEventArgs usa GestureEventArgs. –