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

Ric*_*chC 8 c# windows-phone-8.1 win-universal-app

这是我的页面导航的场景:

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

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

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

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

如果他们进入MP-> L-> AL并回击,他们应该去Locations.

如果他们进入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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*hao 4

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

解决方案是:当您添加完位置后,您应该从“添加位置”页面转到“位置”页面。

但你不应该用来Frame.Navigate(typeof(LocationPage));这样做。

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