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

Nie*_*els 26 c# navigation windows-phone windows-phone-8.1 win-universal-app

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

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

this.Frame.Navigate(typeof(Page2));
Run Code Online (Sandbox Code Playgroud)

当我在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();
    }
Run Code Online (Sandbox Code Playgroud)

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

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

亲切的问候,尼尔斯

Igo*_*lic 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • @Nanoc请再次检查. (2认同)

小智 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();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)