派生类中的事件
本文关键字:事件 派生 | 更新日期: 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);