Acepto, la documentación sobre burbujeo/tunelización en MSDN no es genial en absoluto.
He encontrado este artículo de la revista MSDN "Understanding Routed Events and Commands In WPF" mucho mejor para explicar los eventos de burbujeo.
Busca la sección "Evento de enrutamiento", copia pegada a continuación:
Evento enrutamiento
Entendiendo un poco sobre los árboles lógicas y visuales es importante porque los eventos enrutados consiguen enrutan basan principalmente en el árbol visual . Los eventos enrutados admiten RoutingStrategy of Bubble, Tunnel o Direct.
Burbuja es la más común y significa que un evento de burbujas (propagar) hasta el árbol visual de el elemento de origen hasta que se ha manejado o que llegue a la elemento raíz. Esto le permite manejar un evento en un objeto más arriba en la jerarquía de elementos del elemento fuente . Por ejemplo, puede adjuntar un botón. Haga clic en el controlador en el elemento de cuadrícula que se incluye en lugar de directamente en el botón. Los eventos de burbuja solo tienen nombres que indican su acción (por ejemplo, MouseDown).
eventos Túnel van en la otra dirección , a partir de la elemento raíz y atravesando el árbol elemento hasta que se manipulan o llegan al elemento de origen para el evento . Esto permite que los elementos ascendentes intercepten el evento y lo manejen antes de que el evento llegue al elemento fuente . Los eventos de túnel tienen sus nombres con el prefijo Previo por convención (como PreviewMouseDown).
Los eventos directos se comportan como los eventos normales en .NET Framework. El único controlador potencial para el evento es un delegado que está conectado al evento .
Normalmente, si un evento de túnel es definido para un evento en particular, existe es un evento de burbuja correspondiente. En el caso ese caso, el evento Túnel dispara primero , comenzando desde la raíz y hasta llegar al elemento fuente en busca de un controlador. Una vez que se ha manejado o ha llegado al elemento fuente , el evento Bubble está disparado, subiendo desde el elemento fuente y buscando un controlador . Un evento Bubble o Tunnel no no detiene su enrutamiento solo porque se llama a un controlador de eventos . Si quieres para detener la formación de burbujas o el proceso de construcción de túneles , se marca el evento como maneja en el controlador de eventos utilizando el evento argumentos que se pasan:
private void OnChildElementMouseDown(object sender, MouseButtonEventArgs e) { e.Handled = true; }
Una vez que su manejador marca un evento como manejado, no se elevará a ningún más controladores. Bueno, eso es solo parcialmente cierto. En realidad, el evento enrutamiento continúa detrás de las escenas, y se puede conectar explícitamente eventos manipuladores de código con una anulación de los el método UIElement.AddHandler que tiene una bandera adicional para efectivamente decir, "Me llaman, incluso si el evento tiene marcado como manejado ". Se especifica que marca con una llamada como la siguiente:
m_SomeChildElement.AddHandler(UIElement.MouseDownEvent, (RoutedEventHandler)OnMouseDownCallMeAlways,true);
El primer parámetro a AddHandler es la RoutedEvent desea manejar. El segundo es un delegado al método de manejo de eventos (que necesitará para tener la firma correcta para el delegado del evento ). El tercer parámetro indica si desea que se le notifique , incluso si otro controlador tiene marcó el evento como manejado. El elemento al que llama AddHandler es el que va a estar atento al evento durante el enrutamiento.
Espero que esto ayude.