2011-07-08 15 views
5

¿Qué escenarios prácticos necesitan para usar Tuneling de eventos?WPF Tunneling, uso práctico?

Sé que una respuesta vaga a esto podría ser que se utiliza cuando queremos manejar un evento a través de la visual/lógica en la que se produce el evento. Pero eso es solo teoría.

En la práctica, ¿por qué debería tunelizar un evento?

También funciona el túnel (y el burbujeo) en el árbol lógico o árbol visual o en ambos?

Respuesta

8

Me parece que los eventos de túnel son muy útiles para manejar eventos en elementos que no he creado yo mismo, y por lo tanto no tienen una forma fácil de agregar un controlador de eventos. Por ejemplo, el ItemsControl genera elementos de IU basados ​​en una plantilla, como resultado, no siempre es un proceso sencillo obtener una referencia a estos elementos. En lugar de agregar un controlador de eventos a cada elemento que genera el ItemsControl, en su lugar puede manejar el evento tunelizado en un elemento principal único.

Eventos enrutados traverse a 'hybrid' tree, que no es el árbol visual o lógico. Esto suena un poco loco, pero nunca me ha causado problemas en el pasado.

+0

Oh Thx man ... árbol híbrido nunca se supo tomo .. aplausos. –

4

Los eventos de túnel se utilizan en WPF para todos los eventos OnPreview. El túnel tiene sentido si quiere que el elemento objetivo real sea el último que recibe el evento.

Si tiene un cuadro de lista con un elemento que contiene un cuadro de texto. Al hacer clic en el cuadro de texto consumirá el clic, por lo que no seleccionará el cuadro de lista. Si utiliza el evento de clic de mouse o vista previa del túnel, puede seleccionar primero, dejándolo sin manejar y luego se desplaza al cuadro de texto. También tenga en cuenta que en WPF cada evento primero dispara una vista previa y luego un evento de burbuja, si el evento de vista previa no fue manejado.

de MSDN:

de túnel: En un principio, los controladores de eventos en la raíz del árbol elemento se invocan. el evento enrutado entonces viaja una ruta a través de sucesivos elementos secundarios a lo largo de la ruta, hacia el elemento nodo que es el evento enrutado fuente (el elemento que eleva el evento enrutado ). eventos de túnel enrutado son a menudo utilizados o manipulados como parte de la composición para un control, tal que los eventos de piezas de material compuesto pueden ser suprimidos o reemplazados deliberadamente por los acontecimientos que son específicos para el control completo . Los eventos de entrada provistos en WPF a menudo vienen implementados como como un par túnel/burbujeo. Los eventos de túnel también son a veces denominados eventos de vista previa, porque de una convención de nomenclatura que se usa para los pares.

AFAIK El árbol visual se utiliza para atravesar, pero como MSDN no funciona, no puedo buscar una fuente adecuada.

2

Esta es una cita de MSDN:

de túnel: En un principio, los controladores de eventos en la raíz del árbol elemento se invocan. el evento enrutado entonces viaja una ruta a través de sucesivos elementos secundarios a lo largo de la ruta, hacia el elemento nodo que es el evento enrutado fuente (el elemento que eleva el evento enrutado ). eventos de túnel enrutado son a menudo utilizados o manipulados como parte de la composición para un control, tal que los eventos de piezas de material compuesto pueden ser suprimidos o reemplazados deliberadamente por los acontecimientos que son específicos para el control completo . Los eventos de entrada provistos en WPF a menudo vienen implementados como como un par túnel/burbujeo. Los eventos de túnel también son a veces denominados eventos de vista previa, porque de una convención de nomenclatura que se usa para los pares.

de túnel eventos son lo que comúnmente se conoce como Preview -Eventos.

enter image description here

También puede ser que desee leer este artículo de MSDN sobre Advanced WPF: Understand Routed Events and Commands in WPF. @Robert Havery wrote a good explenation to a similar question here on SO.

1

Las interacciones del usuario a menudo se representan mediante pares de eventos, uno que muestra la interacción (túnel) y otro que reacciona (burbujeo). Tener el evento de "vista previa" de túnel primero permite que el control padre intercepte la interacción.

Como ejemplo, si creara su propio control de usuario de estilo de botón, una parte del control podría ser un icono. Si el usuario hiciera clic en el icono, interceptaría el evento de vista previa de clic de túnel porque el icono no necesita saber que se hizo clic. A continuación, puede generar un evento de burbujeo informando a los controles que contienen el botón en el que se hizo clic.

Cuestiones relacionadas