我想这是一个简单的问题,但我似乎无法弄明白......
我有一个MainPage.xaml,它在OnNavigatedTo事件上运行代码。 如果用户使用硬件返回键导航到此页面,如何禁用此功能?
MainPage => Page2 使用HW BACKKEY => MainPage.xaml //不要运行代码
MainPage =>第3页=> MainPage.xaml //运行代码
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (!TheUserNavigatedBackFromAnotherPageUsingTheBackkey)
{
// RUN FRESH CODE
}
else
{
// DO NOTHING
}
}
亲切的问候, 尼尔斯
答案 0 :(得分:9)
您可以查看NavigationEventArgs的NavigationMode。
if (e.NavigationMode == NavigationMode.Back)
{
// navigation is going backward in the stack
}
这意味着导航在堆栈中向后移动,但并不一定意味着按下后退按钮。例如,通过调用Frame.GoBack()方法,它仍然会向后导航。
答案 1 :(得分:2)
如果您不仅使用反向键导航回来,并且想要检查它是否被按下,那么订阅 HardwareButtons.BackPressed 是应用程序范围的,应该很容易提供标记,你可以设置。让我们创建app-wide标志:
public sealed partial class App : Application
{
public bool wasBackKeyUsed = false;
// rest of the code
然后你必须检查你的后向导航是如何执行的,有几种方法可以完成:
如果您使用NavigationHelper
( Common / NavigationHelper.cs ),则打开该文件并查看其订阅位置。在backkey的eventhandler中,在执行命令之前设置标志:
(Application.Current as App).wasBackKeyUsed = true; // set the flag
this.GoBackCommand.Execute(null); // execute going back
如果你自己和/或通过模板项目在App.xaml.cs中处理你的反键(this answer可能会有所帮助),那么在Frame.GoBack();
之前设置标志:< / p>
(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;
}