当我尝试获取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的任何想法。
由于
丹
答案 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
订阅/取消订阅活动。