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 问题?的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone 8.1 中的画布移动动画

Windows Phone 8.1 中的 BackButtonPressed 问题?

windows phone 8.1 中的独立存储

Windows Phone 8.1 RT 中的 ViewportControl 是啥?

Windows Phone 8.1 中的裁剪图像问题

如何将 C# 中的 Image 对象制作到 Windows Phone 8.1