События предварительного просмотра
События предварительного просмотра (также называются событиями с нисходящей маршрутизацией) представляют собой перенаправленные события, в которых направление маршрута перемещается из корня приложения в сторону элемента, вызвавшего данное событие, и передается в качестве источника данным события. События предварительного просмотра поддерживаются и являются обязательными не для всех скриптов событий. В этом разделе описываются ситуации, в которых существуют события предварительного просмотра, порядок их обработки в приложениях или компонентах, а также случаи, в которых рекомендуется создание событий предварительного просмотра в пользовательских компонентах или классах.
События и входные данные предварительного просмотра
В процессе общей обработки события предварительного просмотра следует внимательно относиться к пометке событий обработанными в данных события. Обработка события предварительного просмотра для любого элемента, отличного от вызвавшего его (элемент, который передается в качестве источника данным события), не позволяет выполнить обработку события для элемента, которым оно вызвано. В некоторых случаях, особенно если существуют указанные элементы, связанные с компоновкой элемента управления, такое поведение является желательным.
В частности, для событий ввода экземпляры данных события совместно используются событиями предварительного просмотра и эквивалентными событиями с восходящей маршрутизацией. Если для пометки события ввода обработанным используется класс события предварительного просмотра, класс события ввода с восходящей маршрутизацией не вызывается. Если для пометки события обработанным используется экземпляр события предварительного просмотра, обработчики событий с восходящей маршрутизацией обычно не вызываются. Обработчики класса или экземпляра могут быть зарегистрированы или присоединены с возможностью вызова даже в том случае, если событие помечено обработанным (этот способ обычно не используется).
Дополнительные сведения об обработке классов и о том, как они связаны с событиями предварительного просмотра, см. в разделе Маркировка перенаправленных событий как обработанных и обработка классов.
Обход скрытия события элементами управления
События предварительного просмотра часто используются при обработке составного элемента управления событий ввода. В некоторых случаях вызов некоторых событий элемента управления запрещается при разработке, например, для его последующей замены определяемым в компоненте событием, которое содержит более точные сведения и подразумевает более конкретное поведение. Например, в элементе управления Windows Presentation Foundation (WPF) Button запрещаются события с восходящей маршрутизацией MouseLeftButtonDown и MouseLeftButtonDown, которые вызываются элементом Button или его составными элементами для регистрации действий мыши. Вместо них всегда вызывается событие Click самим элементом управления Button. Событие и его данные по-прежнему продолжают перемещаться по маршруту, но, поскольку в элементе управления Button данные события помечаются как Handled, вызываются только те обработчики событий, для которых явно указана необходимость их вызова для параметра handledEventsToo. Чтобы обрабатывать запрещенное элементом управления событие, в других элементах, расположенных по направлению к корню приложения, присоедините в коде обработчики со значением параметра handledEventsToo, равным true. В большинстве случаев более простым способом изменения направления маршрутизации является обработка события ввода, эквивалентного событию предварительного просмотра. Например, если в элементе управления запрещено событие MouseLeftButtonDown, попробуйте присоединить обработчик событий PreviewMouseLeftButtonDown. Этот метод подходит только для базовых событий ввода элементов, например MouseLeftButtonDown. Для этих событий ввода используются пары событий с нисходящей и восходящей маршрутизацией, вызов обоих событий и совместное использование данных события.
Каждый из этих методов имеет побочные эффекты или ограничения. Побочным эффектом обработки события предварительного просмотра является то, что обработка события в конкретный момент времени может отключить обработчики, которые запрограммированы для обработки событий с восходящей маршрутизацией. В связи с этим обычно не рекомендуется помечать событие обработанным, если оно по-прежнему находится в части предварительного просмотра маршрута. Ограничение метода handledEventsToo заключается в том, что нельзя задать обработчик handledEventsToo в XAML в качестве атрибута. Вместо этого необходимо зарегистрировать обработчик событий в коде после получения объектной ссылки на элемент, к которому обработчик будет присоединен.
См. также
Основные понятия
Маркировка перенаправленных событий как обработанных и обработка классов