BackButtonPressed issues in Windows Phone 8.1?
本文关键字:Phone Windows issues in BackButtonPressed | 更新日期: 2023-09-27 18:06:59
在我的windows phone 8.1运行时应用程序中有一个弹出窗口。
当返回按钮被按下并在页面中打开弹出窗口时,应用程序应该留在页面本身,否则它应该返回。这是我的概念。因此,我编写如下代码:
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
if (PopupWindow.IsOpen)
{
PopupWindow.IsOpen = false;
e.Handled = true;
}
}
即使在页面中打开了弹出窗口,应用程序也会转到上一页。我在windows phone silverlight应用程序中使用了相同的逻辑,并且成功了。
注意:我使用的是Basic Page
我到底犯了什么错误?
检查两件事:
-
默认在
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 }
还要记住,事件是按照您订阅它们的顺序触发的,例如,导航助手在加载事件中订阅。如果你在之后订阅,那么导航将是第一个。
我用这种方式解析
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;
}