请检查下面的代码,它以两种不同的方式定义相同的滚动事件:
---------------------------------正常方式------------ --------------------------
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);}”方法仅在定义事件的类中引发?当它在外面时所有者类,该事件只能添加或删除处理程序“+ = / - =”?
感谢您的时间!!
答案 0 :(得分:1)
您的实施基础,即我们以不同方式提出每一种方式的方式都是正确的。
但除此之外,就我对路线事件的了解而言......
第一个是 NOT 路由事件。它是一个简单的CLR事件,其类型为RoutedEventHandler
委托。引发此事件时,它不会分别冒泡\隧道到祖先/子UI元素。
在实际水平上,我想如果您尝试使用EventTrigger
中的第一个,它将无效。