Вопрос о прямой маршрутизации - PullRequest
4 голосов
/ 27 июля 2010

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

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

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

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

Спасибо!

1 Ответ

2 голосов
/ 02 августа 2010

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

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

...