【问题标题】:How to properly navigate backstack in Windows Phone 8.1 universal store app如何在 Windows Phone 8.1 通用商店应用程序中正确导航 backstack
【发布时间】:2014-05-27 13:24:48
【问题描述】:

这是我的页面导航场景:

MainPage (MP) Locations (L) AddLocation (AL)

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

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

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

如果他们去 MP->L->AL 并反击,他们应该去 Locations。

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

不对,我在 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 非常陌生。

【问题讨论】:

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


    【解决方案1】:

    你的问题是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 Page将从BackStack auto中删除。

    【讨论】:

    • 啊,是的——完美而简单!我现在检查 CanGoBack 并在由于某种原因没有 BackStack(不应该发生)时回退到 Navigate。
    • 是的,你应该在执行 GoBack() 方法之前检查 CanGoBack。
    • @ChrisShao 不错的答案,伙计!但是在 OneWayNavigaion 的情况下我能做什么,例如 launch->LoginPage->MP ?当用户在 MP 并按下返回时,应用程序应该关闭,而不是返回到 LP。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多