2009-09-15 4 views
15

Я изучаю WPF/Silverlight и видел в MS vidcast, что теперь рекомендуется использовать RoutedEventArgs над EventArgs; хотя он не сказал точно, почему.RoutedEventArgs vs EventArgs

У меня есть приложение для форм выигрышей, которое использует интерфейсы для «виджетов», чтобы не быть привязанным к определенной технологии отображения (в презентациях/просмотренных моделях), поэтому, если моему событию IButton Click сейчас нужно взять RoutedEventArgs, теперь я Угадайте, это не так полезно.

Может кто-нибудь объяснить, если я должен переключиться на RoutedEventArgs во всех случаях и почему?

Как кто-то еще имеет опыт и мнения об использовании виджета интерфейса, как я их описываю?

ответ

32

Ну, в основном RoutedEvent проходит через Logical дерева, либо из исходного элемента в корневой элемент (Bubble событие маршрута) или, реже, от корневого элемента к подуровней элементов (Tunnel маршрут события). Это означает, что если у вас есть Button внутри StackPanel, то он находится внутри Grid; если вы определите событие Click в элементах управления, все они вызовут его, если только один из них не обрабатывает.

Если маршрут событие Bubble (назван в качестве регулярного события Click), она будет идти:

Button -> StackPanel -> Grid

Если маршрут событие Tunnel (названный PreviewClick), он будет идти в другую сторону вокруг :

Grid -> StackPanel -> Button

Так что теперь с обработки, это довольно простой. Если это маршрут Bubble, и Button устанавливает RoutedEventArgs.Handled в true, что StackPanel и Grid не будут запускать его. То же самое с RoutedEvent, если его обрабатывает Grid, то StackPanel и Button не будут запускать его.

Это мое понимание в двух словах, я избегал некоторых вещей для простоты.

Я рекомендую this chapter для лучшего понимания этой функции WPF.

+2

Моя голова болит = ( – Coops

+1

не @CodeBlend никакой боли, никакого усиления! – Carlo

+1

Простой и лаконичный объяснение. В каком случае вы должны использовать событие Tunnel? Я не могу думать о каких-либо практических применений. –

1

RoutedEventArgs - это новый аргумент события, который существует для поддержки WPF-модели eventing: Routed Events. Трудно объяснить в короткой статье, почему именно WPF выбрал эту модель или что это такое, поэтому я начну с указания хорошей статьи по этому вопросу.

0

Скажем, у нас есть элемент Button, содержащий другие элементы, StackPanel, который содержит TextBox и элемент Image.

Элемент Button должен иметь возможность обрабатывать событие клика независимо от того, было ли нажато Изображение или был ли TextBox.

Следовательно, WPF предоставляет способ:

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