WPF, Пухирцеві події
Нижче наведено приклад програми демонструє бульбашкове поширення подій:
У цьому прикладі створюється просте вікно, яке демонструє бульбашкове поширення події. Якщо клацнути на будь-якій частині мітки, події виникатимуть у порядку, перерахованому на текстовій панелі нижче. На малюнку наведено вигляд цього вікна відразу після натискання користувача на зображенні всередині мітки. Подія MouseUp проходить п'ять рівнів та зупиняється на вікні MainWindow.

У цьому прикладі є ще один момент. Якщо встановити прапорець chb_ShowFirstEvent, метод Some_Clicked() надасть властивості RoutedEventArgs.Handled значення true, що зупиняє послідовність бульбашкового поширення події відразу при його виникненні. Тому ви побачите у списку лише першу подію, як показано на малюнку:

Тут необхідно додаткове приведення, т.к. властивість CheckBox.IsChecked є логічним значенням, яке може набувати значення null (bool?, а не bool). Значення null є невизначеним станом прапорця, який означає, що він і не встановлений, і не скинутий. Ця особливість не використовується в цьому прикладі, тому досить простого приведення.
Оскільки метод Some_Clicked() обробляє подію MouseUp, що виникає в об'єкті Window, клацання можна перехоплювати в текстовій панелі та на порожній поверхні вікна. Однак подія MouseUp не виникає при натисканні на кнопці "Очистити" (яка видаляє з текстової панелі всі записи). Це пов'язано з тим, що кнопці відповідає цікавий фрагмент коду, який блокує подію MouseUp та генерує подію вищого рівня Click. Одночасно прапору Handled надається значення true, що блокує подальшепросування події MouseUp.
На відміну від елементів керування Windows Forms більшість елементів WPF не мають події Click. Натомість вони мають простіші події MouseDown і MouseUp. Подія Click зарезервована для кнопкових елементів керування.
Обробка заблокованої події
Цікаво, що є спосіб отримувати події, які зазначені як оброблені. Замість прикріплення обробника події за допомогою XAML слід використовувати розглянутий метод AddHandler(). Цей метод має перевантажений варіант, який набуває логічного значення у третьому параметрі. Якщо задати його рівним true, ви отримаєте подію, навіть якщо для неї було встановлено прапор Handled:
Таке рішення рідко буває вдалим. Кнопка призначена для блокування події MouseUp з дуже простої причини: щоб уникнути плутанини. Адже в Windows прийнято, що "клацнути" на кнопці можна і за допомогою клавіатури, та ще кількома способами. Якщо ви помилково оброблятимете в елементі Button подію MouseUp, а не події Click, ваш код буде реагувати тільки на клацання мишею, але не на еквівалентні клавіатурні дії.