如何清除导航堆栈?

时间:2015-02-12 12:10:48

标签: c# android navigation xamarin.forms

我的应用中存在导航问题。我使用xamarin.forms如何清理我的导航堆栈。没有用Pop和push。我能看到完整的导航堆栈吗?

5 个答案:

答案 0 :(得分:35)

在最新版本的Xamarin.Forms中,您可以使用

查看导航堆栈
Navigation.NavigationStack

因此你可以使用

var existingPages = Navigation.NavigationStack.ToList();
foreach(var page in existingPages)
{
    Navigation.RemovePage(page);
}

此代码必须进入导航页面后面的代码或实现INAVigation的代码。

更多信息Xamarin.Forms.INavigation Members

答案 1 :(得分:8)

这是我用来清空堆栈并导航到指定页面的函数。 (用例是应用程序在使用过程中被取消激活,我需要踢出用户)

    public async Task PopAllTo(ViewModel vm)
    {
        if (vm == null) return;
        Page page = PreparePage(vm); //replace 'page' with the page you want to reset to
        if (page == null) return;
        _navigation.InsertPageBefore(page, _navigation.NavigationStack.First());
        await _navigation.PopToRootAsync();
    }

答案 2 :(得分:5)

你可以试试这个......

    public void ResetNavigationStack()
    {
        if (_navigation != null && _navigation.NavigationStack.Count() > 0)
        {
            var existingPages = _navigation.NavigationStack.ToList();
            foreach (var page in existingPages)
            {
                _navigation.RemovePage(page);
            }
        }
    }

和BOOOM !!!导航堆栈被清除brotha!

或者如果你想重置模态堆栈

    public async Task<Page> PopAllModals()
    {
        Page root = null;

        if (_navigation.ModalStack.Count() == 0)
            return null;

        for (var i = 0; i <= _navigation.ModalStack.Count(); i++)
        {
            root = await _navigation.PopModalAsync(false);
        }
        return root;
    }

和BOOOM!那些模态消失了!

答案 3 :(得分:2)

对于在2020年观看此视频的人:

await Navigation.PopToRootAsync();

或者如果您使用的是Shell导航

await Shell.Current.Navigation.PopToRootAsync();

答案 4 :(得分:-2)

您可以通过调用以下内容来访问应用程序的导航堆栈:Navigation.NavigationStack。

我认为最好的方法是将导航堆栈解析为一个列表并清除它:

Navigation.NavigationStack.ToList().Clear();