Подтвердить что ты не робот

Разница между событиями Bubbling и Tunneling

Какая разница между событиями Bubbling и событиями туннелирования? Где я должен использовать события Bubbling и где использовать события Tunneling? Спасибо в Advance!

4b9b3361

Ответ 1

WPF предоставляет нам ряд различных механизмов обработки событий - они пузырятся, туннелируются и прямы. Все они известны как Маршрутизированные события.

Прямое событие

Вероятно, вы уже привыкли к прямому маршрутизируемому событию. Это где сам элемент обрабатывает событие, которое произошло. Хороший пример будет обрабатывать его onClick -эвент кнопки мыши в стандартном WinForms. Здесь событие поднимается в элементе GUI и получает обрабатываемый указанным элементом GUI.

Событие Bubbling

Теперь все мы похожи на пузырьки в той или иной форме. Происходит буксирование когда событие не обрабатывается элементом (например, a textbox), и событие "пузыри" - это путь к контейнерам пользовательского интерфейса, которые его удерживают. Для Например, скажем, у вас есть окно, содержащее панель и внутри на этой панели у вас есть сетка, а внутри сетки есть текстовое поле. Если событие не обрабатывается текстовым полем, затем оно перемещается, передается или "пузыри" до уровня сетки (поскольку сетка содержит текстовое поле), если он не обрабатывается на этом уровне, тогда событие пузырится дальше "дерево" (известное как визуальное дерево) панели, где она может или не может обрабатываться. Этот процесс продолжается до тех пор, пока он не будет обработан или событие "ускользает" от верхнего элемента.

Примеры пузырькового события были бы чем-то вроде MouseButtonDown событие. Или событие Keydown.

Tunneling

Туннелирование - это противоположность Bubbling. Таким образом, вместо события "вверх" визуальное дерево, событие перемещается вниз по визуальному дереву в направлении элемент, который считается источником. Стандартное обозначение WPF определение события туннелирования состоит в том, что все они начинаются с "предварительного просмотра", например previewdownkey и previewmousebuttondown. Ты можешь поймать их на пути к "целевому" элементу и обработать его. пример для этого может быть, возможно, у вас есть некоторые элементы управления внутри сетки и по какой-то причине вы решили, что никакой контроль внутри этой сетке будет разрешено использовать букву "t".

Источник с мнением автора, которого я не поддерживаю и не согласен.

fooobar.com/questions/408568/...

Хороший демонстрационный проект

И последнее, но не менее важное объяснение и другой учебник.

Ответ 2

В начале: соглашение об именах в WPF для некоторых событий по умолчанию - Preview<event> для туннелирования и <event> для барботажа. Так, например, для KeyDown мы имели бы PreviewKeyDown и KeyDown, туннелирование и барботирование соответственно.

Различие между ними, как предполагает соглашение об именах, заключается в том, что событие туннелирования начнется с наивысшего node в дереве (возможно, в окне) и спустится до самого младшего. Событие пузырьков начнется у ребенка, а затем снова вернется вверх.

В этом руководстве должно быть понятно: http://www.codeproject.com/Articles/464926/To-bubble-or-tunnel-basic-WPF-events