You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WinUI应用中模拟Frame.NavigationFailed事件触发?

如何触发UWP Frame的NavigationFailed事件并让Navigate返回false

以下是几种可靠的触发方式,能让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:00:59