派生类中的事件

本文关键字:事件 派生 | 更新日期: 2023-09-27 18:11:27

我已经在UserControl类Main中声明了一个事件:

public static readonly RoutedEvent CloseEvent = EventManager.RegisterRoutedEvent(
    "CloseClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Main));
public event RoutedEventHandler CloseClick
{
    add { AddHandler(CloseEvent, value); }
    remove { RemoveHandler(CloseEvent, value); }
}

这段代码应该是有效的,因为我在其他类中使用过。问题是当我试图在另一个类中收听事件时。

UserControl content;
if (value == "main")
{
    content = new Main();
    content.CloseClick += new RoutedEventHandler(closeClick);
} else {
    ...
    ...
}
MasterPage.addContent(content);

我希望"content"是任何类型的派生自UserControl。如果我声明"内容"为类型"主"的事件被发现,但如果它声明为BaseClass"UserControl"一切,但事件的工作原理。我错过什么了吗?

派生类中的事件

这应该是正确的。我的意思是Main是事件源的正确类型,而不是UserControl(它可以是任何东西)。

如果您想要为任何userControl引发事件,则创建附加路由事件。它们可以从任何DependencyObject(即Main或基础UserControl或两者)引发。

我不知道我是否理解了你的问题。我认为您正在将派生类强制转换为它的基类,然后试图使用派生类中存在的事件。

如果"Main"派生自UserControl,并且你声明一个"Main"对象为"UserControl",那么只有基类方法,属性和事件(在"UserControl"中出现的)应该是可用的。

您可以首先定义一个基类并将CloseClick事件放入其中。然后你的其他usercontrols继承了这个基类

class MyBaseUserControl : UserControl
{
    public static readonly RoutedEvent CloseEvent = EventManager.RegisterRoutedEvent(
    "CloseClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Main));
    public event RoutedEventHandler CloseClick
    {
        add { AddHandler(CloseEvent, value); }
        remove { RemoveHandler(CloseEvent, value); }
    }
}
MyBaseUserControl content;
if (value == "main")
{
    content = new Main();
    content.CloseClick += new RoutedEventHandler(closeClick);
} else {
    ...
    ...
}
MasterPage.addContent(content);