我在我的应用程序中遇到了导航问题。 我使用Xamarin.Forms,如何清理我的导航堆栈,而不使用Pop和Push。 我能否查看完整的导航堆栈?
我在我的应用程序中遇到了导航问题。 我使用Xamarin.Forms,如何清理我的导航堆栈,而不使用Pop和Push。 我能否查看完整的导航堆栈?
Navigation.NavigationStack
var existingPages = Navigation.NavigationStack.ToList();
foreach(var page in existingPages)
{
Navigation.RemovePage(page);
}
这段代码需要放在实现了INavigation接口的导航页或其他类的代码后面。
更多信息请参考Xamarin.Forms.INavigation成员
这是我编写的一种函数,用于清空堆栈并导航到指定页面。 (使用情况是应用程序在使用过程中被停用,我需要将用户踢出)
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();
}
如果有人在2020年查看此内容:
await Navigation.PopToRootAsync();
await Shell.Current.Navigation.PopToRootAsync();
await Shell.Current.GoToAsync("//animals/monkeys");
- Solarcloud public void ResetNavigationStack()
{
if (_navigation != null && _navigation.NavigationStack.Count() > 0)
{
var existingPages = _navigation.NavigationStack.ToList();
foreach (var page in existingPages)
{
_navigation.RemovePage(page);
}
}
}
并且BOOOM!!!那个导航栈已经被清除了兄弟!
或者如果你想重置模态栈
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!这些模态框就消失了!