【问题标题】:Back button control in windows phone appwindows phone 应用程序中的后退按钮控制
【发布时间】:2014-12-31 08:47:30
【问题描述】:

我正在开发一个 windows phone 8 应用程序。我想控制手机的后退按钮来执行特定任务。我希望当用户在特定页面中按下后退按钮时,它不会导航到上一页而是导航到我想要的页面。他们有什么方法可以控制手机中的硬件后退按钮吗?

【问题讨论】:

    标签: c# windows-phone-8 windows-phone


    【解决方案1】:

    在 Silverlight 应用程序(WP7、WP8、WP8.1)中,您可以这样做:

    protected override void OnBackKeyPress(CancelEventArgs e)
    {
        // put any code you like here
        MessageBox.Show("You pressed the Back button");
        e.Cancel = true;                       
    }
    

    如果您使用 Silverlight,这将适用于所有 Windows Phone 版本。


    如果您使用的是 WinRT for Windows Phone 8.1,则有点不同:

    打开 NavigationHelper.cs 并进行以下修改:

    private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
    {
        if (this.GoBackCommand.CanExecute(null) && !e.Handled)
        {
            e.Handled = true;
            this.GoBackCommand.Execute(null);
        }
    }
    

    现在在您的应用页面(按下后退按钮将打开的页面)中,添加以下命名空间:

    using Windows.Phone.UI.Input;
    

    将此处理程序添加到页面的构造方法中:

    HardwareButtons.BackPressed += OnBackPressed;
    

    然后添加这个方法:

    private async void OnBackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
    {
        e.Handled = true;
        // add your own code here to run when Back is pressed
    }
    

    注意:在这两种情况下,'e.Handled = true' 行告诉操作系统已经处理了后退按钮按下,因此操作系统不会执行默认行为。如果您删除该行,您自己的代码将运行,并且操作系统也将执行自己的向后导航。

    请注意 Rowland 关于覆盖后退按钮的评论 - 如果您没有直观地导航,您会混淆用户并冒着您的游戏被拒绝的风险(如果您只需要控制暂停屏幕或菜单也可以,但是如果你实现了一些花哨的东西,比如使用后退按钮作为游戏控件,你会遇到麻烦)。

    如果您需要,我的博客也有相同的答案,但会提供更多详细信息: http://grogansoft.com/blog/?p=572

    【讨论】:

      【解决方案2】:

      虽然可以取消导航事件,并且允许在游戏中显示暂停屏幕或类似内容,但通常不允许在应用程序中使用后退按钮进行除向后导航之外的任何操作;根据requirement 5.2.4 的 Windows Phone 技术认证要求

      为保持一致的用户体验,后退按钮只能用于应用中的向后导航。

      如果您正在创建允许取消“返回”操作的 XAML 应用,例如 Windows Phone 技术认证要求的 5.2.4.4 :

      对于游戏,当在游戏过程中按下返回按钮时,游戏可以选择显示暂停上下文菜单或对话框,也可以将用户导航到上一个菜单屏幕。

      然后您可以通过覆盖页面上的OnNavigatingFrom 方法来实现这一点,并设置NavigatingCancelEventArgsCancel 属性,因此类似于Frame, page, and navigation features for Windows Phone 8 中的这个示例:

      protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
      {
          base.OnNavigatingFrom(e);
      
          // If the navigation can be cancelled, ask the user if they want to cancel
          if (e.IsCancelable)
          {
              MessageBoxResult result = MessageBox.Show("Do you want to stay here?", "Confirm Navigation from Page", MessageBoxButton.OKCancel);
              if (result == MessageBoxResult.OK)
              {
                  // User wants to stay here
                  e.Cancel = true;
                  return;
              }
          }
      }
      

      当然,您可以选择以不同的方式实现提示,但这应该说明它是如何可能的。

      【讨论】:

      • 我正在开发一款游戏,为此它需要在按下返回按钮时导航到特定页面。他们有什么办法吗?
      • 这是 XAML 游戏还是 XNA?
      • @user3599830 在这种情况下,我已经为您更新了一个示例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      相关资源
      最近更新 更多