Windows Store App中自动导航到下一页失败

时间:2014-07-21 13:39:29

标签: c# xaml windows-runtime windows-store-apps windows-8.1

我在Windows应用商店应用(Windows 8.1)中有一个页面X,它在启动画面后显示。我想在页面加载之前/之后评估一些内容,然后用户才能与页面进行交互。

根据评估,我想做两个中的一个:

  1. 只需向用户显示页面X,只有当用户点击按钮
  2. 时才导航到第Y页
  3. 跳过当前页面并自动导航到第Y页
  4. 1工作正常。

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

    一个提示是,当自动调用Navigate()代码行中的断点时,屏幕仍会显示启动画面,因此似乎尚未加载UI元素。所以最后一个问题是:如何在加载所有元素的情况下进行评估和自动导航(或者只是为了使其有效)?

1 个答案:

答案 0 :(得分:4)

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

  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));
            };
        }
    }
    
  3. 当然,在这两种情况下,您都可以在调用Frame.Navigate(...)之前在lambda表达式中添加您喜欢的任何计算

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