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 中的 BackButtonPressed 问题?