我的Windows Phone 8.1通用应用程序中有2页。
我使用带有点击事件代码的按钮,从 Page1 .xaml导航到 Page2 .xaml:
this.Frame.Navigate(typeof(Page2));
当我在Page2上时,我使用硬件后退按钮,应用程序关闭,没有例外或任何事情。它只是返回到开始屏幕。
我已在 :
上尝试了以下操作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();
}
据我所知,我不清楚后面的堆栈。
发生了什么,我该如何解决这个问题?
亲切的问候, 尼尔斯
答案 0 :(得分:79)
这是Windows Phone 8.1的新功能。
如果使用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
答案 1 :(得分:5)
如果要在按后退按钮时显示确认对话框请记下下面的代码
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();
}
}
}
答案 2 :(得分:1)
您可以使用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);
}
}