C# RegisterClassHandler中的classType参数

C# RegisterClassHandler中的classType参数,c#,wpf,C#,Wpf,classType参数的用途是什么: public static void RegisterClassHandler(Type classType, RoutedEvent routedEvent, Delegate handler); 来自msdn:“声明类处理的类的类型。” 但这似乎仍然有点模糊 public class MyClass { static MyClass() { EventManager.RegisterClassHandler(typeof

classType参数的用途是什么:

public static void RegisterClassHandler(Type classType, RoutedEvent routedEvent, Delegate handler);
来自msdn:“声明类处理的类的类型。”

但这似乎仍然有点模糊

public class MyClass
{
    static MyClass()
    {
        EventManager.RegisterClassHandler(typeof(MyClass), Button.ClickEvent, ClickHandler);
        EventManager.RegisterClassHandler(typeof(Button), Button.ClickEvent, ClickHandler);
        EventManager.RegisterClassHandler(typeof(MyClass), Mouse.MouseDownEvent, MouseDownHandler);
        EventManager.RegisterClassHandler(typeof(Button), Mouse.MouseDownEvent, MouseDownHandler);

    }

}

我假设第一个处理程序最接近声明该处理程序的类。但是在按钮上添加第二个处理程序似乎也能起作用?做这件事的正确方法是什么?对于Mouse.MouseDownEvent,还可以在完全不相关的类中的按钮上添加处理程序?

当类类型(或派生类型)的实例位于RoutedEvent的路由上时,RegisterClassHandler中的classType参数用于调用classhandler

例如,ButtonBase.ClickEvent在窗口实例上以以下代码处理:

EventManager.RegisterClassHandler(typeof(Window), ButtonBase.ClickEvent, Handler);
这类似于在每个窗口元素上添加(附加)处理程序:

<Window ButtonBase.Click="Handler">

因此,类类型不必是包含代码的类来注册处理程序


处理程序中的发送者是类类型的实例。

如果不明显,则MSDN页面上有一个示例。@Clemens请您添加一个链接。是的,我应该使用MyClass。但是按钮类型呢?这是完全错误的还是有什么目的?我可以像在按钮的所有实例上使用附加的eventhandler一样使用它吗?不确定,我想说预期的用法是传递调用RegisterClassHandler的类的类型。也许这有助于: