【发布时间】:2010-08-04 11:37:40
【问题描述】:
如果有人能用一个简单的例子来解释,我将不胜感激。
【问题讨论】:
标签: wpf
如果有人能用一个简单的例子来解释,我将不胜感激。
【问题讨论】:
标签: wpf
想象一个包含密集的子控件层次结构的窗口。现在假设您想做某事,您可以在窗口中的任意位置单击鼠标右键。
【讨论】:
路由事件是具有更多“旅行能力”的事件,如 Gishu 的 回答中所述。路由事件由一个 RoutedEvent 类的实例 + 普通的 .NET 事件来表示,它封装了它:
public class MyClassWithARoutedEvent : UIElement
{
public static readonly RoutedEvent DoSomethingEvent;
public event RoutedEventHandler DoSomething
{
add { base.AddHandler ( MyClassWithARoutedEvent.DoSomethingEvent, value );
remove { base.AddHandler ( MyClassWithARoutedEvent.DoSomethingEvent, value );
}
}
在这种情况下,您通常会使用被吹捧的事件:
另外值得一提的是,您可以在控件中使用 RoutedEvent,即使它没有定义它,甚至从一个元素继承,确实如此。这是因为您可以真正将 RoutedEvent 实例视为事件的强类型名称。因此,如果您有权访问此“名称”(这就是通常将路由事件的实例公开的原因),您可以欠它:
public class MyClassWithARoutedEvent : UIElement
{
public static readonly RoutedEvent ClickEvent;
static MyClassWithARoutedEvent ( )
{
ClickEvent = ButtonBase.ClickEvent.AddOwner( typeof ( MyClassWithARoutedEvent ) );
}
// A wrapper should be placed here as described above
}
【讨论】: