Вопрос о прямом маршрутизированном событии

Мы с коллегой обсуждали перенаправленные события и пришли к некоторым вещам, которые не имели особого смысла. Прежде всего, какова цель события Direct и почему события LeftMouseButtonDown и PreviewLeftMouseButtonDown являются прямыми, а не всплывающими и туннельными соответственно?

Согласно документации, события LeftMouseButtonDown (и предварительный просмотр) ведут себя как всплывающие и туннелирующие события, за исключением того, что событие возникает и повторно возникает по мере того, как эти события пересекают дерево. Поскольку прямые события могут обрабатываться только источником события, из этого следует, что любое UIElement может обрабатывать прямое событие, поскольку каждое из них вызывает событие и, следовательно, также является источником. (Разве повторное повышение события не отличается от повышения?). Почему тогда они не туннелируют и не пузырятся, как многие другие подобные события?

Ни мой коллега, ни я не могли придумать вариант использования, в котором мы когда-либо создавали бы пользовательское событие, используя прямую стратегию (хотя мы придумали некоторые для туннелирования и всплытия), но LeftMouseButtonDown, одно из самых распространенных событий (если не САМОЕ распространенное) использует эту стратегию.

У кого-нибудь есть идеи о рациональности этого?

Спасибо!


person Nicros    schedule 26.07.2010    source источник


Ответы (1)


Я предполагаю, что это будет производительность, и есть соображения по поводу наличия нескольких событий для одного и того же.

Уже есть событие для MouseDown, маршрутизировать его и LeftMouseDown не имеет особого смысла. Наконец, что сработает первым и будет ли отмена\обработка первого предотвратит второй? Похоже, было бы слишком просто обрабатывать одно и то же событие дважды.

person Steven    schedule 02.08.2010