在WPF中,你定义一个事件的处理函数,通常是一个类的实例的触发的事件进行处理——比如点击某个按钮后执行该按钮注册的事件响应函数。例如下面的代码,为一个Button类的实例定义一个事件处理函数。
<Button Content="Like" Click="btnLike_Click"/>
你也可以定义类的事件处理函数,对应所有这个类型的实例,而不是单个实例(使用RegisterClassHandler 静态函数)。任何一个实例触发事件都会执行这个事件处理函数。
举个例子,我们可以定义一个事件处理函数,当用户点击任何一个Button 控件的时候它都会被执行。
public MainWindow()
{
this.InitializeComponent();
// Call when user clicks on any Button
EventManager.RegisterClassHandler(
typeof(Button),
ButtonBase.ClickEvent,
new RoutedEventHandler(HandleAllButtons));
}
private void HandleAllButtons(object sender, RoutedEventArgs e)
{
Button b = (Button)e.Source;
Trace.WriteLine(string.Format("* You clicked on [{0}] button", b.Content));
}
原文地址:https://wpf.2000things.com/2012/07/20/607-an-instance-handler-vs-a-class-handler/
*********************************************译者注*********************************************
如果某个事件注册了类事件处理函数(ClassHandler),而该类的实例也注册了对应的事件处理函数,类事件处理函数(ClassHandler)将会先于实例事件函数执行。