.NET Maui页面导航触发未处理异常(已添加Catch捕获块)
问题原因
你添加的try-catch仅覆盖了按钮点击事件的代码逻辑,但异常是在导航到页面的过程中触发的(页面初始化或XAML解析阶段),所以这个catch块根本捕获不到异常。
解决步骤
1. 捕获全局异常,获取具体错误信息
在App.xaml.cs中添加全局异常捕获逻辑,拿到详细的异常内容,这是定位问题的核心:
protected override void OnStart() { // 捕获AppDomain级别的未处理异常 AppDomain.CurrentDomain.UnhandledException += (sender, e) => { var exception = e.ExceptionObject as Exception; Debug.WriteLine($"全局未处理异常:{exception?.Message}"); Debug.WriteLine($"堆栈跟踪:{exception?.StackTrace}"); }; // 捕获Task中未观察到的异常 TaskScheduler.UnobservedTaskException += (sender, e) => { Debug.WriteLine($"Task未处理异常:{e.Exception.Message}"); Debug.WriteLine($"堆栈跟踪:{e.Exception.StackTrace}"); e.SetObserved(); // 标记异常已处理,避免程序崩溃 }; }
2. 检查页面初始化阶段的异常
给页面构造函数添加try-catch,捕获InitializeComponent()执行时的异常:
public PurchaseATreePage() { try { InitializeComponent(); } catch (Exception ex) { Debug.WriteLine($"页面初始化异常:{ex.Message}"); Debug.WriteLine($"堆栈跟踪:{ex.StackTrace}"); throw; // 暂时抛出以便调试,后续可根据情况处理 } }
3. 排查XAML代码可能的问题
从你提供的Button XAML来看,常见坑点:
- CornerRadius值过大:部分平台(如Android旧版本)对Button的CornerRadius有上限,若超过控件高度的一半可能引发异常,可尝试减小
CornerRadius值(比如改成10)测试。 - 属性拼写或兼容性问题:检查是否有拼写错误的属性名,或替换
LightGray为Color.LightGray测试,确认颜色值是否在当前平台可用。
4. 验证导航代码正确性
确保触发页面导航的代码在主线程执行,示例正确导航代码:
// 确保在UI线程调用导航 await Navigation.PushAsync(new PurchaseATreePage());
内容的提问来源于stack exchange,提问作者Alexa Pettitt
相关产品推荐
相关产品推荐

