Windows Phone 8.1 Universal App在从第二页导航时终止?

我的Windows Phone 8.1通用应用程序中有2页。

我使用带有click事件代码的按钮从Page1 .xaml导航到Page2 .xaml:

this.Frame.Navigate(typeof(Page2)); 

当我在Page2上时,我使用硬件后退按钮,应用程序关闭,没有例外或任何事情。 它只是返回到开始屏幕。

我已经在第2页尝试了以下内容:

 public Page2() { this.InitializeComponent(); Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; } void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) { Frame.GoBack(); } 

据我所知,我不清楚后面的堆栈。

发生了什么,我该如何解决这个问题?

亲切的问候,尼尔斯

这是Windows Phone 8.1的新增function。

如果使用VS2013模板创建新的Hub Universal App,您会注意到Common文件夹中的一个名为NavigationHelper的类。

此NavigationHelper为您提供了如何正确响应后退按钮的提示。 因此,如果您不想使用NavigationHelper,请按以下步骤操作:

 public BlankPage1() { this.InitializeComponent(); HardwareButtons.BackPressed += HardwareButtons_BackPressed; } void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) { if (Frame.CanGoBack) { e.Handled = true; Frame.GoBack(); } } 

您也可以在应用级别执行此操作,以避免在每个页面上执行此操作:

 public App() { this.InitializeComponent(); this.Suspending += this.OnSuspending; #if WINDOWS_PHONE_APP HardwareButtons.BackPressed += HardwareButtons_BackPressed; #endif } #if WINDOWS_PHONE_APP void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) { Frame rootFrame = Window.Current.Content as Frame; if (rootFrame != null && rootFrame.CanGoBack) { e.Handled = true; rootFrame.GoBack(); } } #endif 

如果要在按后退按钮时显示确认对话框请记下下面的代码

  private async void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) { e.Handled = true; if (Frame.CanGoBack) { Frame.GoBack(); } else { var msg = new MessageDialog("Confirm Close"); var okBtn = new UICommand("OK"); var cancelBtn = new UICommand("Cancel"); msg.Commands.Add(okBtn); msg.Commands.Add(cancelBtn); IUICommand result = await msg.ShowAsync(); if (result != null && result.Label == "OK") { Application.Current.Exit(); } } } 

您可以使用NavigationHelper“模式”女巫也可以帮助您处理生活事件。

NavigationHelper是Microsoft提供的类(它不是Windows Phone API的一部分),您可以在其中注册页面,NavigationHelper负责处理FrameHistory。

要使用NavigationHelper,您必须将类添加到项目中,并在加载时在NavigationHelper上注册Pages。 当您向项目添加BasicPage(而不是BlankPage)时,VisualStudio会添加一个名为common的文件夹,其中包含一些帮助程序类,包括NavigationHelper类。

要在NavigationHelper中注册您的页面,您必须将以下代码添加到您想要NavigationHelper的所有页面。

 public sealed partial class MySuperCoolPage : Page { private readonly NavigationHelper navigationHelper; public MySuperCoolPage() { InitializeComponent(); navigationHelper = new NavigationHelper(this); } protected override void OnNavigatedFrom(NavigationEventArgs e){ this.navigationHelper.OnNavigatedFrom(e); } protected override void OnNavigatedTo(NavigationEventArgs e) { navigationHelper.OnNavigatedTo(e); } } 

有关此主题的更多信息以及处理生命周期事件的能力,您可以阅读本文或观看此video 。