2014-12-31 55 views
0

我正在开发一个Windows Phone 8应用程序。我想控制手机的后退按钮以完成特定的任务。我希望当用户在特定页面按下后退按钮时,它不会导航到前一页,而是导航到我想要的页面。他们是否有任何方式来控制手机中的硬件后退按钮?在Windows Phone应用程序中的后退按钮控制

回答

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

要在所有的Windows Phone版本的工作,如果你正在使用Silverlight。


如果您使用的WinRT为Windows Phone的8.1,这是一个有点不同:

打开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 =真正的”行告诉OS的已经处理了后退按钮,因此操作系统不会执行默认行为。如果你删除该行,你自己的代码将运行,操作系统也会自行向后导航。

请注意Rowland的关于覆盖Back按钮的评论 - 如果您没有直观的导航,您会混淆用户并冒着被拒绝的风险(如果您只需要控制暂停屏幕或菜单就没问题,但是如果你使用Back按钮作为游戏控制来实现一些噱头,你将会遇到麻烦)。

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

1

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

为了保持一致的用户体验,后退按钮只能用于在应用程序中向后导航。

如果要创建一个XAML应用程序的地方是允许取消“后退”操作,如每对Windows Phone的 技术认证要求5.2.4.4:

对于游戏,当在游戏过程中按下后退按钮时,游戏可以选择呈现暂停上下文菜单或对话框,或者它可以将用户导航到之前的菜单屏幕。

那么你可以通过重写OnNavigatingFrom方法在网页上实现这一点,并设置NavigatingCancelEventArgsCancel财产,所以像这个例子从Frame, page, and navigation features for 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; 
     } 
    } 
} 

当然,你可以选择以不同的方式实施提示,但这应该说明如何可能。

+0

我正在开发一个游戏,对于需要将浏览到特定的页面上按后退按钮。他们有什么办法呢? – user3599830

+0

这是XAML游戏还是XNA? –

+0

这是XAML游戏 – user3599830

相关问题