如何检查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
    }  
}

亲切的问候,尼尔斯·

如何检查OnNavigatedTo是否被触发的后退按钮在Windows Phone 8.1通用应用程序

你可以检查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;
    }