如何检查OnNavigatedTo是否被触发的后退按钮在Windows Phone 8.1通用应用程序
本文关键字:按钮 Windows Phone 应用程序 1通 检查 何检查 OnNavigatedTo 是否 | 更新日期: 2023-09-27 18:14:53
我想这是一个很简单的问题,但是我似乎想不出来。
我有一个主页。xaml在OnNavigatedTo事件上运行代码。如果用户使用硬件背键导航到此页面,我如何禁用此功能?
MainPage => Page2 使用HW BACKKEY => MainPage。xaml//不要运行代码
MainPage => Page3 => MainPage。xaml//运行代码
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (!TheUserNavigatedBackFromAnotherPageUsingTheBackkey)
{
// RUN FRESH CODE
}
else
{
// DO NOTHING
}
}
亲切的问候,尼尔斯·
你可以检查NavigationEventArgs的NavigationMode
if (e.NavigationMode == NavigationMode.Back)
{
// navigation is going backward in the stack
}
这意味着导航在堆栈中向后移动,但并不一定意味着按下了后退按钮。例如,通过调用Frame.GoBack()方法,它仍然是向后导航。
如果你不仅用backkey导航,而且你想检查它是否被按下,那么订阅HardwareButtons。BackPressed是应用范围的,它应该很容易提供一个标志,你可以设置。让我们创建应用范围的标志:
public sealed partial class App : Application
{
public bool wasBackKeyUsed = false;
// rest of the code
然后你必须检查你的反向导航是如何执行的,有几种方法可以做到:
如果你正在使用
NavigationHelper
(Common/NavigationHelper.cs),然后打开该文件,将看到它订阅的位置。在backkey的事件处理程序中,在执行命令之前设置标志:(Application.Current as App).wasBackKeyUsed = true; // set the flag this.GoBackCommand.Execute(null); // execute going back
如果你正在处理你的背键自己和/或在App.xaml.cs通过模板项目(这个答案可能有一点帮助),然后设置标志之前
Frame.GoBack();
:(Application.Current as App).wasBackKeyUsed = true; // set the flag Frame.GoBack(); // go back
一旦你有了你的标志,你可以像这样使用它来检查返回键是否被用于导航:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
//check if BackKeyWas used:
if((Application.Current as App).wasBackKeyUsed)
{
// do some code
// and remember to restet the flag
(Application.Current as App).wasBackKeyUsed = false;
}