.net - RoutedEventArgs vs EventArgs
wpf events (3)
Estoy aprendiendo WPF / Silverlight y vi en un video de MS que ahora se recomienda usar RoutedEventArgs
sobre EventArgs
; aunque no decía exactamente por qué.
Tengo una aplicación de formularios ganadores que utiliza interfaces para "widgets" en un intento de no estar atada a una tecnología de pantalla específica (en Presenters / ViewModels), por lo que si mi evento IButton Click ahora necesita tomar el RoutedEventArgs
ahora, supongo que no lo es. tan útil
¿Puede alguien explicarme si debo cambiar a RoutedEventArgs
en todos los casos y por qué?
Además, ¿alguien más tiene experiencia / opiniones sobre el uso de widgets de interfaz cuando los estoy describiendo?
Bueno, básicamente un RoutedEvent
viaja a través del árbol Logical
, ya sea desde el elemento de origen al elemento raíz (ruta de eventos de la Bubble
) o, con menor frecuencia, desde el elemento raíz a los elementos de subniveles (ruta de eventos del Tunnel
). Lo que esto significa es que si tienes un Button
dentro de un StackPanel
de StackPanel
, eso mismo está dentro de una Grid
; si define un evento Click
en los controles, todos lo activarán a menos que uno de ellos lo maneje .
Si la ruta del evento es Bubble
(llamada como un evento regular, Click
), irá:
Button -> StackPanel -> Grid
Si la ruta del evento es Tunnel
(llamado PreviewClick
), irá al revés:
Grid -> StackPanel -> Button
Así que ahora con el manejo , es bastante simple. Si se trata de una ruta de Bubble
y el Button
establece RoutedEventArgs.Handled
to true, ese StackPanel
y Grid
no lo activarán. Lo mismo que con el RoutedEvent
, si la Grid
maneja, StackPanel
y Button
no lo activarán.
Este es mi entendimiento en pocas palabras, evité algunas cosas por simplicidad.
Recomiendo este capítulo para una mejor comprensión de esta característica de WPF.
RoutedEventArgs es un nuevo tipo de argumento de evento que existe para admitir el modelo de evento de WPF: Eventos enrutados. Es difícil explicar en una breve entrada por qué exactamente WPF eligió este modelo o cuál es el punto, por lo que comenzaré indicándole un buen artículo sobre el tema.
Supongamos que tenemos un elemento Button que contiene otros elementos, un StackPanel, que contiene un TextBox y un elemento Image.
El elemento Botón debería poder manejar un evento de clic, sin importar si se hizo clic en la imagen o si el cuadro de texto era.
Por lo tanto, WPF proporciona una manera de:
- Propague un evento a través del árbol de elementos la mayor parte del tiempo desde el elemento fuente (aquí dice la imagen), a un nivel superior hacia el elemento raíz (por ejemplo, el botón aquí).
- Manejar un evento tan propagado.