导航和硬件后退按钮

时间:2014-11-26 20:12:00

标签: c# windows-phone windows-phone-8.1 back-button

我尝试在Windows Phone 8.1应用程序中使用后退按钮。当我启动应用程序时,我在第A页。然后我转到第B页 - 它运行良好,但是当我走过时:

A - > B - > C并单击硬件后退按钮应用程序转到A

当A - >时B - > C - > D和返回 - 也转到A

我用这段代码导航:

Frame.Navigate(typeof(StartingView));

并使用此代码实现硬件后退按钮:

HardwareButtons.BackPressed += HardwareButtons_BackPressed;

Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame != null && rootFrame.CanGoBack)
{
    rootFrame.GoBack();
    e.Handled = true;
}
第D页上的

我列出了Frame.BackStack,它看起来很好。当我创建按钮时:

Frame.GoBack();

它来自D - > C,但当我使用硬件时,它会进入A.

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我通过在构造函数中添加到App.xaml.cs来解决它:

HardwareButtons.BackPressed += HardwareButtons_BackPressed;

然后

private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
        Frame frame = Window.Current.Content as Frame;
        if (frame == null)
        {
            return;
        }

        if (frame.CanGoBack)
        {
            frame.GoBack();
            e.Handled = true;
        }
    }

非常重要:从其他视图中删除了所有这个处理程序。

答案 1 :(得分:0)

你检查了后台入口吗?

检查后台堆中是否有页面。

string myPage = "";

foreach (PageStackEntry page in Frame.BackStack)
{
    myPage = page.SourcePageType.ToString();
}

现在看到字符串" mypage"在每个页面上,确保从每个页面导航后,您将获得您正在导航的页面名称。