正常自定义事件与静态RoutedEvent的区别

时间:2012-03-06 03:16:55

标签: wpf events

请检查下面的代码,它以两种不同的方式定义相同的滚动事件:

---------------------------------正常方式------------ --------------------------

  public event RoutedEventHandler CloseTab;

------------------------------静态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.普通自定义事件和静态RoutedEvent之间有什么区别?

2.为什么第一种方式的事件可以通过像“if(CloseTab!= null){CloseTab(o,e);}”这样的方法引发,但在第二种方式中,它只能通过UIElement.RaiseEvent()方法?

3.我知道这个问题一定非常愚蠢,但这让我很困惑。 这就是为什么第一种方式的事件可以通过“if(CloseTab!= null){CloseTab(o,e);}”方法仅在定义事件的类中引发?当它在外面时所有者类,该事件只能添加或删除处理程序“+ = / - =”?

感谢您的时间!!

1 个答案:

答案 0 :(得分:1)

您的实施基础,即我们以不同方式提出每一种方式的方式都是正确的。

但除此之外,就我对路线事件的了解而言......

  1. 第一个是 NOT 路由事件。它是一个简单的CLR事件,其类型为RoutedEventHandler委托。引发此事件时,它不会分别冒泡\隧道到祖先/子UI元素。

  2. 在实际水平上,我想如果您尝试使用EventTrigger中的第一个,它将无效。