如何清除导航堆栈?
Posted
技术标签:
【中文标题】如何清除导航堆栈?【英文标题】:How do I clear the Navigation stack? 【发布时间】:2015-04-13 04:03:37 【问题描述】:我的应用中有导航问题。我使用 xamarin.forms 如何清理我的导航堆栈。没有使用 Pop 和 push。我可以查看完整的导航堆栈吗?
【问题讨论】:
【参考方案1】:在最新版本的 Xamarin.Forms 中,您可以使用
查看导航堆栈Navigation.NavigationStack
因此你可以使用一个
var existingPages = Navigation.NavigationStack.ToList();
foreach(var page in existingPages)
Navigation.RemovePage(page);
此代码必须进入导航页面或实现 INavigation 的代码后面的代码中。
更多信息Xamarin.Forms.INavigation Members
【讨论】:
太好了,我用的是旧版本,没有 NavigationStack @ibrahim 您可以通过 nuget 升级您的版本。转到项目中的引用并右键单击并单击管理 nuget 包。然后选择更新并安装 Xamarin.Forms 更新 是的,我知道,我刚刚写了问题的原因。因为用这个问题的新版本是愚蠢的。谢谢 当我从中删除一页时,NavigationStack 会变空一段时间。 我希望他们在 Prism.Forms 中实现这一点。【参考方案2】:这是我用来清空堆栈并导航到指定页面的函数。 (用例是应用在使用过程中被停用,我需要将用户踢出去)
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();
【讨论】:
完美运行【参考方案3】:你可以试试这个……
public void ResetNavigationStack()
if (_navigation != null && _navigation.NavigationStack.Count() > 0)
var existingPages = _navigation.NavigationStack.ToList();
foreach (var page in existingPages)
_navigation.RemovePage(page);
然后轰隆隆!!!导航堆栈被清除了兄弟!
或者如果你想重置模态堆栈
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;
然后砰!那些模态已经消失了!
【讨论】:
【参考方案4】:对于 2020 年观看此内容的任何人:
await Navigation.PopToRootAsync();
或者如果您使用 Shell 导航
await Shell.Current.Navigation.PopToRootAsync();
【讨论】:
我正在使用 Shell.. 当我尝试这个时,它会将我重定向到根页面。但我需要清除堆栈并重定向到特定页面。 您是否尝试过在 PopToRootAsync() 之后使用 GoToAsync()?例如:await Shell.Current.GoToAsync("//animals/monkeys");
以上是关于如何清除导航堆栈?的主要内容,如果未能解决你的问题,请参考以下文章