Windows Phone 8.1 中的 BackButtonPressed 问题?

Posted

技术标签:

【中文标题】Windows Phone 8.1 中的 BackButtonPressed 问题?【英文标题】:BackButtonPressed issues in Windows Phone 8.1? 【发布时间】:2014-06-06 12:20:35 【问题描述】:

我的 windows phone 8.1 运行时应用程序中有一个弹出窗口。

当按下返回按钮并在页面中打开弹出窗口时,应用程序应保留在页面本身中,否则应返回。这是我的概念。所以,我编码如下:

    void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    
        if (PopupWindow.IsOpen)
        
            PopupWindow.IsOpen = false;
            e.Handled = true;
        
    

即使弹出窗口在页面中打开,应用程序也会转到上一页。我在 windows phone silverlight 应用程序中使用了相同的逻辑并且有效。

注意:我使用的是基本页面。

我到底犯了什么错误?

【问题讨论】:

看起来很完美。什么不工作?您的应用程序正在关闭?你需要一个 else 在那个逻辑中吗? 【参考方案1】:

检查两件事:

NavigationHelper 默认情况下,HardwareButtons_BackPressed 缺少检查事件是否已经被处理,尝试改进它:

private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)

    // if (this.GoBackCommand.CanExecute(null)) // this is as a default
    if (this.GoBackCommand.CanExecute(null) && !e.Handled) //  add a check-up
    // ... rest of the code

查看您的 App.xaml.cs 文件,在 App() 中有 HardwareButtons_BackPressed 已订阅(检查已订阅的方法是否也导航回来):

public App()

    this.InitializeComponent();
    this.Suspending += OnSuspending;
    //  HardwareButtons.BackPressed += HardwareButtons_BackPressed; // this line also could fire Frame.GoBack() (as default project template)
    // of course check what is in the above method

还请记住,事件是按照您订阅它们的顺序触发的,例如导航助手在 Loaded 事件中订阅。如果您之后订阅,那么导航将是第一个。您可以先订阅,也可以使用标志。

【讨论】:

【参考方案2】:

我这样解决

    protected override void OnNavigatedTo(NavigationEventArgs e)
    
        Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
    

    protected virtual void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
    
        e.Handled = true;
    

【讨论】:

以上是关于Windows Phone 8.1 中的 BackButtonPressed 问题?的主要内容,如果未能解决你的问题,请参考以下文章