【发布时间】:2010-04-26 18:58:09
【问题描述】:
我有一个自定义 Button 类,当它被点击时(打开特定窗口)总是执行相同的操作。我正在添加一个可以在按钮的 XAML 中分配的 Click 事件,就像常规按钮一样。
当它被点击时,如果已经分配了 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; }
}
//...
}
【问题讨论】:
标签: c# event-handling wpf-controls click routed-events