自动导航到下一页在Windows商店应用程序失败

本文关键字:Windows 应用程序 失败 一页 导航 | 更新日期: 2023-09-27 18:13:58

我有一个页面X在Windows商店应用程序(Windows 8.1)得到闪屏后显示。我想在页面加载期间/之后,在用户可以与页面交互之前对某些内容进行评估。

根据求值的不同,我想执行以下两个中的一个:

  1. 只显示X页给用户,当用户点击按钮时导航到Y页
  2. 跳过当前页面并自动导航到页Y

1工作正常

2没有。我试着在构造函数中调用this. frame . navigate (typeof(Y)),由于这个原因,它不起作用。帧仍然为空。然后我试着在LoadState和OnNavigatedTo中调用它,但是在这两种情况下。Frame不为空,则Navigate()方法返回false,这意味着导航失败。我试着在调试中进入该方法,但它不起作用(?)。

一个提示是,当自动调用Navigate()代码行时遇到断点时,屏幕仍然显示闪屏,因此看起来UI元素还没有加载。所以最后的问题是:我如何在加载所有元素的情况下进行计算和自动导航(或者只是为了它能工作)?

自动导航到下一页在Windows商店应用程序失败

我不明白为什么你会在OnNavigatedFrom中调用Frame.Navigate(...),但我可以建议两个适合我的选项:

  1. 导航到OnNavigatedTo中的第二页:虽然这不能开箱工作,但它在指示调度员进行导航时可以做到:

    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                this.Frame.Navigate(typeof(SecondPage));
            });
        }
    }
    
  2. 一个更简单的解决方案是在第一页的Loaded事件中进行导航:

    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            this.Loaded += (sender, args) =>
            {
                this.Frame.Navigate(typeof(SecondPage));
            };
        }
    }
    

当然,在这两种情况下,您都可以在调用Frame.Navigate(...)

之前在lambda表达式中添加任何您喜欢的计算

编辑:作为第三种选择,也许你应该考虑将计算和决策部分移动到App.xaml.cs中的OnLaunched,并加载第一页或第二页作为根页,而不是打开第一页并立即导航到第二页?