control app wpf events

app - wpf elements



¿Cuáles son los eventos de vista previa de WPF? (4)

Básicamente, es el mismo evento pero ocurre justo antes del evento principal. Existen para que pueda escuchar esos tipos de eventos sin interferir con el comportamiento normal del control cuando ocurren esos eventos.

Por ejemplo, los botones hacen cosas cuando haces clic o ingresas el mouse, etc. Si manejas esos eventos tú mismo, debes asegurarte de hacer lo mismo, de lo contrario tu botón no actuará de la misma manera. Los eventos de vista previa le dan un evento en la misma línea de tiempo sin tener que preocuparse por jugar con la funcionalidad existente.

Esto es especialmente útil cuando se trata de estilos personalizados / disparadores / plantillas de control. Cuando comience a anular el aspecto / comportamiento del control.

Entonces, en su Control, realice el trabajo principal que desea en el evento OnKeyDown y deje el evento de vista previa para que lo use alguien más, es así como trabajo con ellos.

He estado buscando descripciones de eventos "Vista previa ******" como cada elemento tiene eventos KeyDown y PreviewKeyDown. ¿Cuál es la diferencia (no es que uno es un evento adjunto y uno no es, la diferencia convencional real y la diferencia de manera de programación)

En cualquier clase derivada de Control, puede anular ambos métodos. OnKeyDown y OnPreviewKeyDown, ahora estoy escribiendo mi control personalizado, ¿qué método debo usar? Y cuál es la diferencia entre los dos.


De la programación de WPF - Chris Sells e Ian Griffith

Con la excepción de los eventos directos, WPF define la mayoría de los eventos enrutados en pares: un túnel y el otro burbujeo. El nombre del evento de túnel siempre comienza con ''Vista previa'' y se levanta primero. Esto les da a los padres la oportunidad de ver el evento antes de que llegue al niño. Esto es seguido por la contraparte burbujeante. En la mayoría de los casos, manejarás solo el burbujeante. La vista previa se suele utilizar para

  • bloquear el evento ( e.Handled = true )
  • hacer que el padre haga algo por adelantado para el manejo normal de eventos.

por ejemplo, si UI Tree = Button contiene Grid contains Canvas contiene Ellipse
Al hacer clic en la elipse, se produciría (MouseDownButton se consume con Button y Click se levanta en su lugar).

PreviewMouseDownButton PreviewMouseDownGrid PreviewMouseDownCanvas PreviewMouseDownEllipse MouseDownEllipse MouseDownCanvas MouseDownGrid


Encontré esta entrada en el blog realmente útil para describir la diferencia:

http://joshsmithonwpf.wordpress.com/2007/06/22/overview-of-routed-events-in-wpf/

Usted tiene el árbol visual, cuando ocurre un evento en un elemento en el árbol, primero un evento de vista previa viajará de la raíz al elemento (túnel): el evento PreviewKeyDown se levantará en todos estos elementos, y luego un "normal" evento viajará del elemento a la raíz (burbujeo).


Esta diferencia tiene que ver con los eventos enrutados, que es cómo WPF implementa su estrategia de manejo de eventos. El nombre del evento estándar (es decir, KeyDown, etc.) implica una estrategia de enrutamiento burbujeante. Los anteriores a "Vista previa" (es decir, PreviewKeyDown, etc.) implican una estrategia de enrutamiento de túneles. Puede leer sobre estas estrategias con más detalle here . Básicamente, cuando se invoca un evento en WPF, primero se desplaza desde el elemento superior al árbol visual hasta el elemento que invoca el evento y finalmente regresa hacia arriba. En el camino hacia abajo, encontrará el evento PreviewKeyDown, y en el viaje de regreso se encontrará con el evento KeyDown, en ese orden.