GetEvent()为附加事件返回null

时间:2009-09-03 15:27:57

标签: wpf events reflection

当我尝试获取WPF“矩形”的eventinfo时,如果routedEvent是对象的本机事件(例如“MouseDown”),则它可以工作(仅作为分配)。

DependencyObject d = rectangle;
string routedEvent = "MouseDown";

EventInfo eventInfo = d.GetType().GetEvent(routedEvent, 
                BindingFlags.Public | BindingFlags.Instance);

但是当我想在矩形上得到附加事件的EventInfo(我想我正确地使用了这个术语)时:

string routedEvent = "Microsoft.Surface.Presentation.Contacts.ContactDownEvent"; 

GetEvent()返回null

关于如何获取附加事件的eventinfo的任何想法。

由于

2 个答案:

答案 0 :(得分:3)

您可能希望使用更具体的EventManager.GetRoutedEventsForOwner方法。

我相信MSDN文档在他们说:

时是不正确的
  

基类包含在   搜索范围。

这是证据:

Debug.Assert(EventManager.GetRoutedEventsForOwner(typeof(Rectangle)) == null);
Debug.Assert(EventManager.GetRoutedEventsForOwner(typeof(Shape)) == null);
//even though FrameworkElement is a base class of the above!
Debug.Assert(EventManager.GetRoutedEventsForOwner(typeof(FrameworkElement)) != null);

因此,您可能需要自行抓取类型层次结构,或者如果是一次性的,只需通过typeof(FrameworkElement)typeof(Rectangle)传递。

答案 1 :(得分:0)

因为附加事件不会作为常规C#事件公开。在Mouse课程中,没有类似的内容:

public event MouseButtonEventHandler MouseDown;

相反,存在MouseDownEvent类型的静态字段RoutedEvent

public static readonly RoutedEvent MouseDownEvent;

您使用EventManager订阅/取消订阅活动。