2017-06-25 5 views
0

Ich versuche, Button Eventclick mit Reflexion zu bekommen. Ich möchte "Btn_AddTest_Click" Zeichenfolge für die Zuweisung an eine CommandBinding erhalten. Zum Beispiel:PropertyInfo button.GetProperty Ereignisse geben null zurück

XAML

<Button x:Name="Btn_Add" 
    Click="Btn_AddTest_Click"/> 

Hinter

public async void Btn_AddTest_Click(object sender, RoutedEventArgs e) 
{...} 

und Funktion:

Type ObjType = Btn_Add.GetType(); 
PropertyInfo eventsProperty = ObjType.GetProperty("Events", BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); 

EventHandlerList events = (EventHandlerList)eventsProperty.GetValue(Btn_Add, null); 

Aber "eventsProperty" return Null, i mit "Events" versucht „, EventClick ", Click" ... gleiche Rückkehr.

Ich wurde von diesem post

+0

EDIT: privat async Leere Btn_AddTest_Click (object sender, RoutedEventArgs e) {...} – Alematt

Antwort

1

inspiriert Ich glaube, dass Sie die RoutedEvents für die Schaltfläche betrachten müssen. Dies wird Ihnen die Click Routingereignis erhalten:

 var eventStore = Btn_Add 
      .GetType() 
      .GetProperty("EventHandlersStore", BindingFlags.Instance | BindingFlags.NonPublic) 
      .GetValue(Btn_Add, null); 

     var clickEvent = ((RoutedEventHandlerInfo[])eventStore 
      .GetType() 
      .GetMethod("GetRoutedEventHandlers", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) 
      .Invoke(eventStore, new object[] { Button.ClickEvent })) 
      .First(); 

Und es aufzurufen:

clickEvent.Handler.DynamicInvoke(null, null); 
+0

danken Ihnen viel, ich finde "Btn_AddTest_Click" in "clickEvent.Handler.Method.Name;" aber ich kann dies nicht in ExecutedRoutedEventHandler für CommandBinding NewCommandBinding = new CommandBinding (NewCommand, Btn_AddTest_Click); – Alematt

+0

War nicht das gleiche Thema, ich fragte meine zweite Frage hier https://stackoverflow.com/questions/44760585/how-get-commandbinding-executed-from-routedeventhandlerinfo Vielen Dank wieder Lockdowne – Alematt

Verwandte Themen