【问题标题】:Navigation and hardware back button导航和硬件返回按钮
【发布时间】:2014-11-26 20:12:00
【问题描述】:

我尝试在 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。

有什么想法吗?

【问题讨论】:

  • 如果您只想返回按下的按钮(正常行为),则不必添加任何处理程序。它会做你所期望的。如果你想告诉用户它即将退出应用程序或者你的应用程序不允许返回,我想添加一个处理程序,除非采取了一些行动。
  • 你在哪里订阅HardwareButtons_BackPressed?请记住,此事件是应用程序范围内的,因此在不取消订阅的情况下订阅每个页面可能是个坏主意。还要在rootFrame.GoBack() 之前设置e.Handeled = true。检查您是否在代码旁边使用 NavigationHelperApp() 构造函数中已有订阅。你也可以看看this question。我还为您的问题添加了合适的标签,并从标题中删除了标签(在大多数情况下它们不应该存在)。欢迎来到 SO。
  • 我在开始页面订阅了 HardwareButtons_BackPressed,然后我只写了一个方法。我设置 e.Handled = true;在 GoBack 之前。还是不行。

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


【解决方案1】:

我通过在构造函数中添加到 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;
        }
    }

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

【讨论】:

    【解决方案2】:

    你检查了backstack条目吗?

    检查页面是否在后台堆栈中。

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

    现在在每个页面上查看字符串“mypage”,并确保在从每个页面导航后,您会获得要导航的页面名称。

    【讨论】:

      【解决方案3】:

      我注意到一些可以提供帮助的东西。如果您使用的是“基本页面”而不是“空白页面”,那么您可以从 App.xaml.cs 中删除“硬件后压”的东西。这应该可以解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 1970-01-01
        • 2015-03-10
        相关资源
        最近更新 更多