Маршрутизируемые события имеют особое поведение, но это поведение в значительной степени невидимо, если вы обрабатываете событие в элементе, в котором оно вызывается.
Когда маршрутизируемые события становятся мощными, это если вы используете любой из предложенных сценариев: определение общих обработчиков в общем корне, создание собственного элемента управления или определение собственного пользовательского класса элемента управления.
Для перенаправленных прослушивателей событий и источников перенаправленных событий нет необходимости совместно использовать общее событие в своей иерархии. Любой UIElement или ContentElement может быть прослушивателем событий для любого перенаправленного события. Таким образом, вы можете использовать полный набор перенаправленных событий, доступных в рабочем API-интерфейсе, в качестве концептуального «интерфейса», посредством которого разнородные элементы в приложении могут обмениваться информацией о событиях. Эта концепция «интерфейса» для перенаправленных событий особенно применима для входных событий.
Маршрутизированные события также можно использовать для связи через дерево элементов, поскольку данные события для события сохраняются для каждого элемента в маршруте. Один элемент может что-то изменить в данных события, и это изменение будет доступно следующему элементу в маршруте.
Помимо аспекта маршрутизации, есть две другие причины, по которым любое данное событие WPF может быть реализовано как перенаправленное событие вместо стандартного события CLR. Если вы реализуете свои собственные события, вы можете также рассмотреть следующие принципы:
- Некоторые функции стилей и шаблонов WPF, такие как EventSetter и EventTrigger , требуют, чтобы указанное событие было перенаправленным событием. Это сценарий идентификатора события, упомянутый ранее.
- Маршрутизируемые события поддерживают механизм обработки класса, благодаря которому класс может указывать статические методы, которые имеют возможность обрабатывать перенаправленные события, прежде чем любой зарегистрированный обработчик экземпляра сможет получить к ним доступ. Это очень полезно при разработке элементов управления, потому что ваш класс может обеспечивать поведение классов, управляемое событиями, которое не может быть случайно подавлено обработкой события в экземпляре.
Источник: MSDN: обзор маршрутизируемых событий