|
Маршрутизируемые события (routedevents) – модель событий WPF, созданная для использования в дереве визуальных элементов. При генерации маршрутизируемого события информация о нём может быть передана как родительским, так и дочерним элементам источника событий.
Реализация и использование маршрутизируемых событий имеет много общего со свойствами зависимостей. Рассмотрим в качестве примера реализацию события Clickв стандартном элементе управления Button:
publicclassButton: ButtonBase
{
// статическое поле для маршрутизируемого события
publicstaticRoutedEventClickEvent=
EventManager.RegisterRoutedEvent("Click",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(Button));
// экземплярнаяоболочкасобытия
publiceventRoutedEventHandler Click
{
add { AddHandler(ClickEvent, value); }
remove { RemoveHandler(ClickEvent, value); }
}
// внутреннийметоддлягенерациисобытия
protectedoverridevoidOnClick(EventArgse)
{
RaiseEvent(newRoutedEventArgs(ClickEvent, this));
}
}
МетодыAddHandler(),RemoveHandler()иRaiseEvent() – этометодыклассаUIElement. Листинг показывает, что при регистрации маршрутизируемого события используется метод EventManager.RegisterRoutedEvent(). Одним из аргументов метода является элемент перечисления RoutingStrategy, описывающего стратегию маршрутизации события:
· Tunnel – событие генерируется в корневом элементе, затем в каждом дочернем элементе, пока не будет достигнут элемент-источник.
· Bubble – событиегенерируетсявэлементеисточнике, затемвкаждомродительскомэлементе, вплотьдокорнядереваэлементов.
· Direct – событиегенерируетсятольковэлементе-источнике.
Обработчики маршрутизируемых событий принимают аргумент RoutedEventArgs. Этот класс содержит четыре полезных свойства:
§ Source – источник события в логическом дереве элементов;
§ OriginalSource – источник события в визуальном дереве элементов;
§ Handled – это значение можно установить в true для остановки маршрутизации события в дереве;
§ RoutedEvent – объект, описывающий маршрутизируемое событие.
КлассUIElementопределяетмножествомаршрутизируемыхсобытий, связанных с клавиатурой, мышью, стилусом. БольшинствособытийиспользуютBubble-стратегию. МногиеBubble-события имеют сопряжённое Tunnel-событие, которое генерируется перед Bubble-событием (Tunnel-событие отличает префикс Preview в названии).
Дата добавления: 2015-11-14; просмотров: 40 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Свойства зависимостейи присоединённые свойства | | | Многопоточность в WPF |