如何正确地在Windows Phone 8.1通用商店应用程序中导航返回堆栈

8
这是我的页面导航方案:
主页 (MP) <===> 地点 (L) <===> 添加地点 (AL)
我不希望用户在按下手机的返回按钮时进入添加地点。
如果他们在主页上并按下返回键,他们应该退出应用程序。
如果他们从主页到达 L 并按下返回键,则应该回到主页。
如果他们从主页到达 L-> AL 并按下返回键,则应该回到地点。
如果他们从主页到达 L-> AL-> L 并按下返回键,则应该回到主页而不是回到添加地点。
现在,我已经在 Common 文件夹中添加了标准的导航助手,然后我在 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个回答

4
你的问题是在经过MP->L->AL->L之后,回退操作应该返回主页面而不是回到添加位置页面,对吗?
解决方法是:当你完成添加位置之后,应该从添加位置页面跳转到位置页面。
但是你不应该使用Frame.Navigate(typeof(LocationPage));来实现这一点。
你应该使用Frame.GoBack();,这样添加位置页面将被自动从BackStack中删除。

啊,是的 - 完美而简单!现在我检查CanGoBack并回退到Navigate,如果由于某种原因没有BackStack(这不应该发生)。 - RichC
1
是的,在执行GoBack()方法之前,您应该先检查CanGoBack。 - Chris Shao
1
@ChrisShao 很好的回答,伙计!但是在 OneWayNavigaion 的情况下,例如 launch->LoginPage->MP,我该怎么办呢?当用户在 MP 页面并按返回键时,应用程序应该关闭,而不是返回到 LP。 - Vitalii Vasylenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接