我有一个自定义的Button类,当它被点击时(打开特定的窗口)总是执行相同的操作。我添加了一个可以在按钮的XAML中分配的Click事件,就像常规按钮一样。检查一个RoutedEvent是否有任何处理程序
当它被点击时,我想执行Click事件处理程序(如果已分配),否则我想执行默认操作。问题是显然没有办法检查是否有任何处理程序已添加到事件中。
我认为该事件为空检查将做到这一点:
if (Click == null)
{
DefaultClickAction();
}
else
{
RaiseEvent(new RoutedEventArgs(ClickEvent, this));;
}
...但是,这并不编译。编译器告诉我,除了定义类之外的事件,除了+ =或 - =之外,我不能做任何其他事情,尽管我正在尝试在定义的类中检查这个事件。
我实现正确的行为自己,但它的丑陋和繁琐,我不相信没有一个内置的方式做到这一点。我肯定错过了什么。
下面是相关代码:
public class MyButtonClass : Control
{
//...
public static readonly RoutedEvent ClickEvent =
EventManager.RegisterRoutedEvent("Click",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(MyButtonClass));
public event RoutedEventHandler Click
{
add { ClickHandlerCount++; AddHandler(ClickEvent, value); }
remove { ClickHandlerCount--; RemoveHandler(ClickEvent, value); }
}
private int ClickHandlerCount = 0;
private Boolean ClickHandlerExists
{
get { return ClickHandlerCount > 0; }
}
//...
}