如何在Windows Phone 8.1通用商店应用程序中正确导航Backstack

时间:2014-05-27 00:38:51

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

以下是我的页面导航的方案:

MainPage(MP)< ==>位置(L)< ==> AddLocation(AL)

我不希望用户在按下手机上的后退按钮时转到AddLocation。

如果他们是MP并且他们回击,他们应该退出应用程序。

如果他们进入MP-> L并回击,他们应该去MainPage。

如果他们进入MP-> L-> AL并回击,他们应该去位置。

如果他们进入MP-> L-> AL-> L并回击,他们应该转到MainPage而不是回到AddLocations。

没错,我在Common文件夹中有标准的nav帮助器,然后我将此代码添加到Locations页面以实现此目的:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    this.navigationHelper.OnNavigatedTo(e);
    var bs = Frame.BackStack.Where(b => b.SourcePageType.Name == "MainPage").FirstOrDefault();
    if (bs!= null)
    {
        Frame.BackStack.Clear();
        Frame.BackStack.Add(bs);
    }
}

这对我来说似乎是一个可怕的黑客攻击,我确信有一些支持/设计的方法可以做到这一点,我不知道。我是WinRT和Xaml的新手。

1 个答案:

答案 0 :(得分:4)

您的问题是went MP->L->AL->L and hit back, they should go to MainPage and not back to AddLocations不是吗?

解决方案是:完成位置添加后,应从AddLocation页面转到位置页面。

但是你不应该使用Frame.Navigate(typeof(LocationPage));来做这件事。

您应该使用Frame.GoBack();,因此AddBocation Page将从BackStack auto中删除。