BackButtonPressed issues in Windows Phone 8.1?

本文关键字:Phone Windows issues in BackButtonPressed | 更新日期: 2023-09-27 18:06:59

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

当返回按钮被按下并在页面中打开弹出窗口时,应用程序应该留在页面本身,否则它应该返回。这是我的概念。因此,我编写如下代码:

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

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

注意:我使用的是Basic Page

我到底犯了什么错误?

BackButtonPressed issues in Windows Phone 8.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
    }
    

还要记住,事件是按照您订阅它们的顺序触发的,例如,导航助手在加载事件中订阅。如果你在之后订阅,那么导航将是第一个。

我用这种方式解析

    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;
    }