如何在WinUI应用中模拟Frame.NavigationFailed事件触发?
以下是几种可靠的触发方式,能让Frame.Navigate()返回false并触发NavigationFailed事件:
使用无法实例化的页面类型
创建一个带有私有构造函数的页面类,这样Frame在尝试实例化页面时会失败,进而触发NavigationFailed事件,同时Navigate方法返回false。
示例代码:private class UninstantiablePage : Page { // 私有构造函数,外部无法创建实例 private UninstantiablePage() { } } // 调用导航 bool navigationResult = MyFrame.Navigate(typeof(UninstantiablePage)); // navigationResult 会是 false,且触发NavigationFailed事件在页面构造函数中抛出未处理异常
注意要在构造函数里抛异常,而不是OnNavigatedTo(后者是导航成功后才执行的)。当Frame尝试初始化页面时,构造函数的异常会被框架捕获,触发NavigationFailed事件,同时Navigate返回false。
示例代码:public class FailingTestPage : Page { public FailingTestPage() { throw new InvalidOperationException("模拟导航失败场景"); } } // 调用导航 bool navigationResult = MyFrame.Navigate(typeof(FailingTestPage)); // navigationResult 为 false,触发NavigationFailed事件
为什么你之前的尝试没成功?
- 传入错误的页面类型(比如不存在的
Type)会直接抛出ArgumentException,这属于参数校验错误,不属于框架定义的“导航失败”场景,所以不会触发NavigationFailed。 - 在
OnNavigatedTo里抛异常是导航完成后的错误,此时Navigate已经返回true,自然不会触发NavigationFailed。
内容的提问来源于stack exchange,提问作者Izi
相关产品推荐
相关产品推荐

