我正在尝试使用反射来获取按钮事件。我想获得“Btn_AddTest_Click”字符串以将其分配给CommandBinding。 例如:
XAML
<Button x:Name="Btn_Add"
Click="Btn_AddTest_Click"/>
背后
public async void Btn_AddTest_Click(object sender, RoutedEventArgs e)
{...}
功能:
Type ObjType = Btn_Add.GetType();
PropertyInfo eventsProperty = ObjType.GetProperty("Events", BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
EventHandlerList events = (EventHandlerList)eventsProperty.GetValue(Btn_Add, null);
但是“eventsProperty”返回Null,我尝试使用“Events”,“EventClick”,点击“...同样返回。
我受到post
的启发答案 0 :(得分:1)
我相信您需要查看按钮的RoutedEvents。这将为您提供Click
路由事件:
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();
并调用它:
clickEvent.Handler.DynamicInvoke(null, null);