RoutedEventArgs против EventArgs

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

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

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

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

Ответы

Ответ 1

Ну, в основном 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 не будут запускать его.

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

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

Ответ 2

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

Ответ 3

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

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

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

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