一尘不染

Windows Phone 8.1 Universal App终止于从第二页返回导航吗?

c#

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

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

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

当我在Page2上并且使用硬件后退按钮时,该应用程序将无任何异常关闭。它只是返回到开始屏幕。

我已经在 Page 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();
    }

据我所知,我没有清除后栈。

这是怎么回事,我该如何解决?

亲切的问候,尼尔斯


阅读 219

收藏
2020-05-19

共1个答案

一尘不染

这是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
2020-05-19