获取属性和字段的值或调用方法很容易,但我很难显示事件处理程序。我不能像 PropertyInfo 那样只使用 GetValue 函数。
我已尝试按照https://web.archive.org/web/20131213074318/http://bobpowell.net/eventsubscribers.aspx的说明进行操作- 这可以在Windows 窗体中显示事件。
但是,这不适用于 Silverlight,因为 Silverlight 没有“EVENTHANDERLIST”。
关于如何在 Silverlight 中显示事件 VALUES 的任何想法?
我试过这个
namespace eventhandlers
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Type t = sender.GetType();
FieldInfo fi = t.GetFields(BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic);
EventHandler eh = (EventHandler)fi.GetValue(sender);
System.Reflection.EventInfo[] eventInfo = button1.GetType().GetEvents();
Delegate[] dels = eh.GetInvocationList();
foreach(Delegate del in eh.GetInvocationList() )
{
string text = del.Method.Name;
textBlock1.Text = text + ". " + textBlock1.Text;
}
}
}
}
但我收到错误“用户代码未处理 FieldAccessException”和“SilverlightApp1.MainPage.button1_Click (System.Object, System.Windows.RoutedEventArgs)”方法“System.Windows.Controls.Primitives.ButtonBase._isLoaded”无法访问场。” 在
EventHandler eh = (EventHandler)fi.GetValue(sender);