Windows Phone 应用程序中的后退按钮控件

本文关键字:按钮 控件 Phone 应用程序 Windows | 更新日期: 2023-09-27 18:35:41

我正在开发一个Windows Phone 8应用程序。我想控制手机的后退按钮以执行特定任务。我希望当用户在特定页面中按下后退按钮时,它不会导航到上一页,而是导航到我想要的页面。他们有什么方法可以控制手机中存在的硬件后退按钮吗?

Windows Phone 应用程序中的后退按钮控件

在 Silverlight 应用程序(WP7、WP8、WP8.1)中,您可以执行以下操作:

protected override void OnBackKeyPress(CancelEventArgs e)
{
    // put any code you like here
    MessageBox.Show("You pressed the Back button");
    e.Cancel = true;                       
}

如果您使用的是Silverlight,这将适用于所有Windows Phone版本。


如果您使用的是适用于Windows Phone 8.1的WinRT,则情况略有不同:

打开导航助手.cs并进行以下修改:

private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
    if (this.GoBackCommand.CanExecute(null) && !e.Handled)
    {
        e.Handled = true;
        this.GoBackCommand.Execute(null);
    }
}

现在,在应用页面(按下后退按钮时将打开的页面)中,添加以下命名空间:

using Windows.Phone.UI.Input;

将此处理程序添加到页面的构造函数方法中:

HardwareButtons.BackPressed += OnBackPressed;

然后添加此方法:

private async void OnBackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
    e.Handled = true;
    // add your own code here to run when Back is pressed
}

注意:在这两种情况下,"e.Handle = true"行告诉操作系统已处理后退按钮按下,因此操作系统不会执行默认行为。如果删除该行,则自己的代码将运行,操作系统也将执行自己的向后导航。

请注意 Rowland 关于覆盖后退按钮的评论 - 如果你没有直观地导航,你会让用户感到困惑,并冒着你的游戏被拒绝的风险(如果你只需要控制暂停屏幕或菜单,那就没问题了,但如果你实现一些噱头,比如使用后退按钮作为游戏控件,你就会有麻烦了)。

如果需要,我的博客有相同的答案,但更详细:http://grogansoft.com/blog/?p=572

虽然可以取消导航事件,并且允许在游戏中显示暂停屏幕或类似内容,但通常不允许将后退按钮用于应用程序中向后导航以外的任何操作;根据 Windows Phone 技术认证要求的要求 5.2.4

若要保持一致的用户体验,"后退"按钮只能用于应用中的向后导航。

如果你正在创建允许取消"后退"操作的 XAML 应用,例如根据 Windows Phone 技术认证要求的 5.2.4.4:

对于游戏,

在游戏过程中按下"后退"按钮时,游戏可以选择显示暂停上下文菜单或对话框,也可以将用户导航到上一个菜单屏幕。

然后,您可以通过重写页面上的 OnNavigatingFrom 方法来实现这一点,并设置NavigatingCancelEventArgsCancel 属性,因此类似于 Windows Phone 8 的框架、页面和导航功能中的以下示例:

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    base.OnNavigatingFrom(e);
    // If the navigation can be cancelled, ask the user if they want to cancel
    if (e.IsCancelable)
    {
        MessageBoxResult result = MessageBox.Show("Do you want to stay here?", "Confirm Navigation from Page", MessageBoxButton.OKCancel);
        if (result == MessageBoxResult.OK)
        {
            // User wants to stay here
            e.Cancel = true;
            return;
        }
    }
}

当然,您可以选择以不同的方式实现提示,但这应该说明它是如何实现的。