使用typeof添加Xaml类时触发DeclaringMethod(null)异常求助
解决XAML页面添加到导航列表时的DeclaringMethod异常
这个问题我之前也碰到过,大概率是Type元数据访问的权限或者类型定义细节问题导致的,咱们一步步排查解决:
检查页面类的访问修饰符
这是最常见的原因:确保你的XAML页面的代码隐藏类是public的。如果是internal或者private,当调试器(或者你的导航逻辑)尝试访问Type的DeclaringMethod元数据时,会因为权限不足抛出异常。VS默认生成的页面类通常是public,但如果你手动修改过访问级别,一定要改回来。避免使用嵌套的页面类
如果你的页面类是嵌套在另一个类内部的,DeclaringMethod会指向外层类的定义方法。这种情况下,调试器或者反射逻辑可能无法正确解析元数据,进而抛出异常。尽量让页面类作为顶级类存在,不要嵌套在其他类里。区分调试器显示异常还是运行时异常
有时候这个异常只是调试器的“假警报”:当你在调试窗口查看集合项的PageType属性时,调试器会尝试加载DeclaringMethod等元数据,但你的代码实际运行时并没有问题。可以先直接运行程序,看导航功能是否正常工作,如果运行时没报错,那只是调试器的小问题,不用太在意。确认页面类有默认构造函数
XAML页面必须要有无参的默认构造函数(VS自动生成的页面都会包含)。如果你手动修改了构造函数,去掉了默认无参构造,不仅会导致导航时无法实例化页面,也可能间接引发元数据访问的异常。
正确的示例代码参考
假设你的导航项类定义如下:
public class MenuItem { public Type PageType { get; set; } public string NavTitle { get; set; } }
添加页面到导航列表的代码应该是这样的:
// 初始化导航集合 MainMenuItems = new ObservableCollection<MenuItem> { new MenuItem { PageType = typeof(HomePage), NavTitle = "首页" }, new MenuItem { PageType = typeof(SettingsPage), NavTitle = "设置" } };
按照上面的步骤排查,基本就能解决这个异常了。
内容的提问来源于stack exchange,提问作者USAFBrowne
相关产品推荐
相关产品推荐

