miércoles, 29 de febrero de 2012

Eventos - Tutorial 5



Routed Event, llego el dia que me decidí a Escribir.

Antes que nada, hola a todos, después de tanto tiempo volvemos, voy a explicar la idea general de los Routed Event (Eventos Enrutados), lo primero que vamos a decir es que son una evolución de los eventos tradicionales, agregan unas cuantas características más, pero como es una evolución de los eventos comunes los mismos pueden ser consumidos de la forma tradicional, es más si trabajan sobre ellos no van a notar diferencia, la diferencia se nota cuando creamos nuestros propios eventos ahí vamos a notar que cambia un poco mucho para mi gusto la mecánica.

Algo que hay que decir es que este tipo de eventos los van a encontrar en WPF y Silverlight, no están disponibles para los queridos WinForm, ya que en WPF podemos por ejemplo dentro de un botón poner un texto, dentro de ese texto otro y una imagen, lo que les quiero decir es que dentro de un control puede haber otros controles, de ahí  sale el concepto de árbol de objetos de WPF, que es un árbol, una estructura como por ejemplo la de las carpetas de Windows, donde la raíz del árbol estaría representada por el disco. Para que quede claro voy  a poner una imagen de una pantallita que estoy armando, está en desarrollo así que la estética queda pendiente jajaj pero va a servir como ejemplo:


Ahí tenemos la pantalla y el árbol, como pueden ver la raíz en este caso está representada por un objeto Windows, en el caso de Silverlight seria page, en el caso del querido WinForm, seria espero lo digan antes de leerlo el Form.





Acá viene lo fundamental de los eventos enrutados, que cuando se disparan pueden subir por el árbol de elementos de WPF o bajar, y más de uno se pregunta para que sirve esto, como estoy contento y feliz como me dijo un gaucho hace unos días les voy a pongamos el ejemplo donde hay 3 botones, el botón 1 que tiene dentro al botón 2 y este posee al botón 3, hacemos clic en el 2 boton que pasa porque al estar el botón 2 en el botón ¿?????? y se plantea el problema bueno seguro se están haciendo varias preguntas esa es mi idea así paso a contarles que los eventos enrutados se dividen en:

                  Eventos directo (Direct). Estos son los conocidos eventos de .NET. Se originan en uno de los elementos y no pasan a ningún otro.

                  Eventos de propagación (Bubbling). Estos eventos se transmiten a la jerarquía de contenedores. El evento se dispara en el elemento que lo origina y luego, es levantado por el padre de ese elemento, y luego por el padre de ese elemento, y así sucesivamente, hasta que WPF alcanza la cima del árbol de elementos.

                  Eventos de túnel (Tunneling). Estos eventos viajan por el árbol de contenidos. Ellos te dan la oportunidad de ver (y posiblemente detener) un evento antes de que alcance el control adecuado.

Otra cosita importante es se acuerdan que hablamos de las firmas de los eventos, bueno en el caso de los eventos enrutados, se mantiene la firma pero como imagino que mas de uno no sabe de lo que le estoy hablando hacemos un repasito, el primer parámetro es un objeto que representa el elemento que origina el evento, y el segundo es un objeto que contiene los argumentos, se acordaron?, espero que si, pero en el caso de nuestros nuevos amigos, el parámetro sender es siempre el elemento al cual fue enlazado el manejador del evento, y el parámetro  que contiene los argumentos en lugar de heredar de la clase EventArgs, lo hace de una clase RoutedEventArgs se acuerdan que algo de esto en un ejemplo anterior les presente a la clase RoutedEventArgs que tiene las siguiente propiedades:
  • Source. Es el elemento en el árbol lógico de objetos WPF que origino el evento.
  • OriginalSource. Es el elemento en el árbol visual de objetos WPF que origino el evento.
  • Handled. Es una propiedad de tipo bool que sirve para indicar si el evento fue manejado y por tanto permite detener la propagación del evento a través del árbol de objetos WPF (esto es muy útil, después vamos a ver un ejemplito).
  • RoutedEvent. Representa el evento actual, es muy útil cuando se enlaza el mismo manejador a varios eventos.

Espero que más o menos ya tengan una idea general de lo que son los eventos enrutados y las novedades que tiene, en el próximo artículo, vamos a ver como declarar un evento y si hago tiempo voy a poner algo de código para que ya puedan practicar, un saludo a todos.

Access