2009-09-15 6 views
15

Estoy aprendiendo WPF/Silverlight y vi en una vidcast de MS que ahora se recomienda usar RoutedEventArgs sobre EventArgs; aunque no dijo exactamente por qué.RoutedEventArgs vs EventArgs

Tengo una aplicación de formas ganadoras que usa interfaces para "widgets" en un intento de no vincularse a una tecnología de visualización específica (en Presenters/ViewModels), así que si mi evento IButton Click ahora necesita tomar el RoutedEventArgs ahora Supongo que no es tan útil.

¿Puede alguien explicar por favor si debo cambiar a RoutedEventArgs en todos los casos y por qué?

Como comentario, ¿alguien más tiene experiencia/opiniones sobre el uso de widgets de interfaz como los estoy describiendo?

Respuesta

32

Bueno, básicamente un RoutedEvent viaja a través del árbol de Logical, ya sea desde el elemento de origen de elemento raíz (Bubble ruta caso) o, menos frecuentemente de elemento raíz a los elementos subniveles (Tunnel ruta del evento). Lo que esto significa es que si tiene un Button dentro de un StackPanel, eso sí está dentro de un Grid; si define un evento Click en los controles, todos lo activarán a menos que uno de ellos maneje el.

Si la ruta evento es Bubble (nombrado como un evento regular Click), irá:

Button -> StackPanel -> Grid

Si la ruta evento se Tunnel (nombrado PreviewClick), irá al revés :

Grid -> StackPanel -> Button

Así que ahora con el manejo de , es bastante simple. Si es una ruta Bubble y Button establece el RoutedEventArgs.Handled como verdadero, StackPanel y Grid no lo activarán. Lo mismo con el RoutedEvent, si lo maneja el Grid, el StackPanel y el Button no lo activarán.

Este es mi entendimiento en pocas palabras, evité algunas cosas por simplicidad.

Recomiendo this chapter para una mejor comprensión de esta función de WPF.

+2

Me duele la cabeza = ( – Coops

+1

@CodeBlend no hay dolor, no hay ganancia! – Carlo

+1

explicación simple y concisa. ¿En qué caso se necesita para utilizar un evento túnel? No puedo pensar en ninguna usos prácticos. –

1

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, así que comenzaré señalando un buen artículo sobre el tema.

0

Digamos que tenemos un elemento de botón que contiene otros elementos, un StackPanel, que contiene un TextBox y un elemento de imagen.

El elemento Button debería ser capaz de manejar un evento de clic sin importar si la imagen que recibió el clic o si el cuadro de texto fue.

Por lo tanto WPF proporciona una manera de:

  • propagan un evento a través del árbol elemento más de las veces burbujeante desde el elemento de origen (en este caso decir la imagen), a un nivel más alto hacia el elemento raíz (por ejemplo, el botón aquí).
  • Manejar dicho evento propagado.
Cuestiones relacionadas