如何检查Windows Phone 8.1 Universal应用程序中的后退按钮是否触发了OnNavigatedTo?

时间:2014-07-26 15:59:52

标签: c# winrt-xaml windows-phone-8.1 win-universal-app

我想这是一个简单的问题,但我似乎无法弄明白......

我有一个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
    }  
}

亲切的问候, 尼尔斯

2 个答案:

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