PropertyInfo button.GetProperty事件返回null

时间:2017-06-25 20:36:21

标签: c# propertyinfo getproperty

我正在尝试使用反射来获取按钮事件。我想获得“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

的启发

1 个答案:

答案 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);