更新 2
不幸的是,WPF 中的大多数事件(即 on UIElement
)都是通过手动实现add
/来实现的,这意味着事件成员只能在or运算符remove
的左侧(即它不能被“读取”)。内部是这样的,每个事件都被“委托”给一个事件集合,并且该集合仅包含分配事件的元素(例如,如果有一个事件,那么该事件集合将只有一个条目。不幸的是,事件集合存储了什么表示处理程序是一个内部结构,您必须能够实例化它才能查询集合。您无法实例化该结构的实例 ( , FWIW) 以查询集合 (-=
+=
MouseLeftButtonDownEvent += somehandler;
RoutedEventHandlerInfo
UIElement.EventHandlersStore._entries
,也是 FWIW)。例如,如果可以,您可以在 QuickWatch 窗口中查询特定事件的处理程序:
grid.EventHandlersStore._entries[
new RoutedEventHandlerInfo(UIElement.MouseLeftButtonDownEvent, false)]
但是,调试器不允许您调用内部构造函数。
没有任何东西只列出事件。您可以在调试器中看到实例的所有成员(watch、quickwatch 等),并且事件具有不同的图标。然后,您可以展开其中的每一个以查看分配给事件的方法。例如:
如您所见,MyEvent
已t_MyEvent
为该特定实例“分配”了方法。
更新:
如果您为一个事件分配了多个事件处理程序,则调试器将仅在快速查看事件的顶层显示最后分配的方法。要查看分配的所有方法,您需要深入到调用列表。例如:
.. 这表明t_MyEvent
和t_MyEvent2
都在 . 的调用列表中MyEvent
。如果您没有处理程序,则MyEvent
值为null
.