我在Windows应用商店应用(Windows 8.1)中有一个页面X,它在启动画面后显示。我想在页面加载之前/之后评估一些内容,然后用户才能与页面进行交互。
根据评估,我想做两个中的一个:
1工作正常。
2没有。我尝试在构造函数中调用this.Frame.Navigate(typeof(Y)),但由于this.Frame仍为null,因此无效。然后我尝试在LoadState和OnNavigatedTo中调用它,但在两种情况下this.Frame都不为null,Navigate()方法返回false,这意味着导航失败。我试图在调试中进入该方法,但它不起作用(?)。
一个提示是,当自动调用Navigate()代码行中的断点时,屏幕仍会显示启动画面,因此似乎尚未加载UI元素。所以最后一个问题是:如何在加载所有元素的情况下进行评估和自动导航(或者只是为了使其有效)?
答案 0 :(得分:4)
我不明白为什么你会在Frame.Navigate(...)
中致电OnNavigatedFrom
,但我可以建议两个对我有用的选项:
导航到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));
});
}
}
更简单的解决方案是在第一页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
,并将第一页或第二页作为根页加载,而不是打开第一页并立即导航到第二页?