Windows Phone 8.1中的返回按钮问题?

3

我在我的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。
实际上我做错了什么?

看起来很完美。什么不起作用?你的应用程序关闭了吗?你需要在那个逻辑中加一个else吗? - Jerry Nixon
2个回答

2

请检查以下两点:

  • by default in NavigationHelper, HardwareButtons_BackPressed lacks checking if the event was already handeled, try to improve it:

    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
    
  • look at your App.xaml.cs file, and in App() there is HardwareButtons_BackPressed subscribed (check if subscribed method also navigates back):

    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
    }
    

请注意,事件按照您订阅的顺序触发,例如Navigation助手在Loaded事件中进行订阅。如果您在之后订阅,则导航将首先执行。您可以在之前订阅或使用标志。


0

我用这种方式解决了

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接