2012-03-06 2 views
0

Пожалуйста, проверьте ниже код, который определяет то же событие прокрутки двумя различными способами:Разница между нормальным настраиваемой случае статический RoutedEvent

------------------- -------------- нормальный путь ---------------------------------- ----

public event RoutedEventHandler CloseTab; 

------------------------------ static RoutedEvent ------- --------------------------

public static readonly RoutedEvent CloseTabEvent = 
     EventManager.RegisterRoutedEvent("CloseTab", RoutingStrategy.Bubble, 
      typeof(RoutedEventHandler), typeof(CloseableTabItem)); 
    public event RoutedEventHandler CloseTab 
    { 
     add { AddHandler(CloseTabEvent, value); } 
     remove { RemoveHandler(CloseTabEvent, value); } 
    } 

1. Какая разница между обычным настраиваемым событием и статическим маршрутом?

2.После того, что событие первым способом может быть поднято с помощью метода типа if if (CloseTab! = Null) {CloseTab (o, e);} ", но, во-вторых, методом UIElement.RaiseEvent()?

3.I знаю, что этот вопрос должен быть очень глупым, но доза меня путает. Именно поэтому событие в первом случае может быть вызвано методом if (CloseTab! = Null) {CloseTab (o, e);} "только в классе, который определено событием? И когда он находится вне класс владельца, событие может только добавлять или удалять обработчики с помощью «+ =/- =»?

Спасибо за ваше время!

ответ

1

Основы реализации, то есть способ, которым мы поднимаем каждый по-другому, являются правильными.

Но, кроме того, насколько мой knowldge на маршрутизации событий идет ...

  1. Первого НЕ маршрутизированное событие. Это простое событие CLR, объявленное с его типом, как делегат RoutedEventHandler. Когда это событие будет поднято, оно не будет пузыриться \ туннелировать до элементов предка/дочернего интерфейса соответственно.

  2. На практическом уровне, я думаю, если вы попытаетесь использовать первый в EventTrigger, это не сработает.

Смежные вопросы