如何清除导航堆栈?
How do I clear the Navigation stack?
我的应用程序导航有问题。我使用 xamarin.forms 如何清理我的导航堆栈。不使用弹出和推送。我可以看到我的完整导航堆栈吗?
在最新版本的 Xamarin.Forms 中,您可以使用
查看您的导航堆栈
Navigation.NavigationStack
因此你可以使用
var existingPages = Navigation.NavigationStack.ToList();
foreach(var page in existingPages)
{
Navigation.RemovePage(page);
}
此代码必须进入导航页面或实现 INavigation 的代码后面。
这是我做的清空堆栈并导航到指定页面的函数。 (用例是应用程序在使用期间 de-activated,我需要将用户踢出)
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();
}
你可以试试这个...
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;
}
然后砰!那些模态消失了!
对于 2020 年观看此内容的任何人:
await Navigation.PopToRootAsync();
或者如果您使用 Shell 导航
await Shell.Current.Navigation.PopToRootAsync();
我的应用程序导航有问题。我使用 xamarin.forms 如何清理我的导航堆栈。不使用弹出和推送。我可以看到我的完整导航堆栈吗?
在最新版本的 Xamarin.Forms 中,您可以使用
查看您的导航堆栈Navigation.NavigationStack
因此你可以使用
var existingPages = Navigation.NavigationStack.ToList();
foreach(var page in existingPages)
{
Navigation.RemovePage(page);
}
此代码必须进入导航页面或实现 INavigation 的代码后面。
这是我做的清空堆栈并导航到指定页面的函数。 (用例是应用程序在使用期间 de-activated,我需要将用户踢出)
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();
}
你可以试试这个...
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;
}
然后砰!那些模态消失了!
对于 2020 年观看此内容的任何人:
await Navigation.PopToRootAsync();
或者如果您使用 Shell 导航
await Shell.Current.Navigation.PopToRootAsync();