我正在开发一款Windows Phone 8应用程序。我想控制手机的后退按钮以执行特定任务。我希望当用户按下特定页面中的后退按钮时,它不会导航到上一页,而是导航到我想要的页面。他们以任何方式控制手机中的硬件后退按钮吗?
答案 0 :(得分:2)
在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,则会有所不同:
打开NavigationHelper.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.Handled = true' line告诉操作系统已按下后退按钮,因此操作系统不会执行默认行为。如果删除该行,您自己的代码将会运行,并且操作系统也会执行自己的向后导航。
请注意Rowland关于覆盖“后退”按钮的评论 - 如果您没有直观导航,则会让用户感到困惑,并且会让您的游戏被拒绝(如果您只需要控制暂停屏幕或菜单)它会很好,但是如果你实现一些噱头,比如使用Back按钮作为游戏控制,你就会陷入困境。)
如果您需要,我的博客会有更多相同的答案: http://grogansoft.com/blog/?p=572
答案 1 :(得分:1)
虽然可以取消导航事件,并且允许在游戏中呈现暂停屏幕或类似物,但通常不允许在应用程序中使用后退按钮进行除向后导航以外的任何操作;每个requirement 5.2.4 Windows Phone的技术认证要求
为了保持一致的用户体验,“后退”按钮只能用于应用中的向后导航。
如果您正在创建允许取消“后退”操作的XAML应用程序,例如Windows Phone的技术认证要求的5.2.4.4 :
对于游戏,当在游戏过程中按下后退按钮时,游戏可以选择显示暂停上下文菜单或对话框,或者可以将用户导航到之前的菜单屏幕。
然后,您可以通过覆盖页面上的OnNavigatingFrom
方法来实现此功能,并设置Cancel
的{{1}}属性,这样的示例来自Frame, page, and navigation features for Windows Phone 8:
NavigatingCancelEventArgs
当然,您可以选择以不同的方式实施提示,但这应该说明它是如何实现的。