RoutedEventArgs против EventArgs - PullRequest
       12

RoutedEventArgs против EventArgs

17 голосов
/ 15 сентября 2009

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

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

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

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

Ответы [ 3 ]

33 голосов
/ 15 сентября 2009

Ну, в основном 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.

3 голосов
/ 15 сентября 2009

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

0 голосов
/ 14 марта 2017

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

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

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

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