Aggiorna 2
Sfortunatamente, la maggior parte degli eventi in WPF (cioè UIElement
) sono implementati implementando manualmente add
/remove
ossia al membro evento può essere solo sul lato sinistro di una -=
o +=
operatore (cioè non può essere "letto"). Gli interni sono tali che ogni evento è "delegato" a una raccolta di eventi e quella raccolta contiene solo elementi per gli eventi assegnati (ad esempio se c'è un singolo MouseLeftButtonDownEvent += somehandler;
allora quella raccolta di eventi avrà solo una voce. Sfortunatamente, quale collezione di eventi gli archivi per rappresentare un gestore sono una struttura interna che dovresti essere in grado di creare un'istanza per interrogare la raccolta. Non puoi istanziare un'istanza di quella struttura (RoutedEventHandlerInfo
, FWIW) per richiedere la raccolta (UIElement.EventHandlersStore._entries
, anche FWIW) . ad esempio, se si potesse si, si potrebbe interrogare il gestore per un evento particolare, come ad esempio nella finestra Controllo immediato:.
grid.EventHandlersStore._entries[
new RoutedEventHandlerInfo(UIElement.MouseLeftButtonDownEvent, false)]
Ma, il debugger non consente di richiamare un costruttore interna 012.
Non c'è qualcosa che elenca solo gli eventi. Puoi vedere tutti i membri di un'istanza nel debugger (watch, quickwatch, ecc.) E gli eventi hanno un'icona distinta. È quindi possibile espandere ciascuno di questi per vedere quale metodo è stato assegnato all'evento. Per esempio:
Come si può vedere, MyEvent
è stato "assegnato" il metodo t_MyEvent
per questo caso particolare.
Aggiornamento: Se si dispone di più di un gestore di eventi assegnata a un evento, il debugger mostrerà solo l'ultimo metodo assegnato nel primo livello della manifestazione in vigilanza veloce. Per vedere tutti i metodi, è necessario eseguire il drill down nell'elenco di chiamate. Per esempio:
.. questo dimostra che sia t_MyEvent
e t_MyEvent2
sono nella lista di invocazione per MyEvent
. Se non si dispone di gestori, il valore per MyEvent
sarà null
.
fonte
2013-02-12 18:32:35
Grazie per la risposta. Quindi nel mio esempio dovrei essere in grado di vedere "MouseLeftButtonDown" da qualche parte quando espongo "_grid"? Sto cercando nella finestra "Locali", ma non riesco a vedere nulla ... – phil13131
Forse hai più delegati assegnati all'evento, ho aggiornato la risposta per includere ... –
Nel mio programma ne ho solo uno metodo assegnato ad ogni evento, ma alcuni metodi in totale che usano ad es 'MouseButtonEventHandler'. Stavo cercando invocationList ma non riesco a trovarlo. Mostreresti gentilmente il tuo esempio per una griglia 'WPF'? Forse è un po 'diverso lì. – phil13131