Windows Phone 8.1 BackPressed无法正常工作

时间:2014-06-25 16:59:25

标签: windows-phone-8.1

Windows phone 8.1全新推出。基本功能是后退按钮点击。这个功能不正常的是这款Windows Phone 8.1。是这种行为还是我犯了错误。

下面的代码在主页中使用,但是这个代码在点击后也从所有其他类调用。我只需要在主页上访问以下方法。

请检查以下代码,并向我推荐一个好的解决方案。

请查看我的代码:

 public HomePage()
 {
  this.InitializeComponent(); 
  Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
 }

    void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {

    }

谢谢

1 个答案:

答案 0 :(得分:10)

工作正常。 BackPressed event适用于整个应用范围。我想到了两个选择:

  • 编写可识别当前调用它的 Page 的eventhandler - 简单示例如下所示:

    private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
    {
        Frame frame = Window.Current.Content as Frame;
        if (frame == null) return;
    
        if (frame.Content is HomePage)
        {
            e.Handled = true;
            Debug.WriteLine("I'm in HomePage");
        }
        else if (frame.CanGoBack)
        {
            frame.GoBack();
            e.Handled = true;
        }
    }
    
  • 第二个选项 - 当您输入 Page 时订阅Windows.Phone.UI.Input.HardwareButtons.BackPressed,并在离开 Page 时取消订阅。请注意,这种方式存在一些缺陷 - 您必须正确处理OnNavigatedTo,OnNavigatedFrom,Suspending和Resuming(更多关于Lifecycle here)。另请注意,订阅应在其他人之前完成 - 例如 NavigationHelper

一些评论 - 上述代码应该有效,但也取决于其他情况:

  • 如果之前有其他订阅BackPressed的内容(在App.xaml.cs中) - 请记住,通常会在订阅时触发事件
  • 检查您是否使用NavigationHelper - 它还订阅了BackPressed
  • 记得不要多次订阅
  • 请记住允许用户离开您的主页