【问题标题】:Remove multiple pages from stack- xamarin.forms从堆栈中删除多个页面 - xamarin.forms
【发布时间】:2020-03-24 04:29:54
【问题描述】:

我有一个有多个屏幕的 xamarin.forms 应用程序。我的页面导航是这样的。

1 --> 2 --> 3 --> 4 --> 5 --> 6

第 6 个页面是使用 Rg.plugin.popup 创建的弹出窗口。用户可以在此层次结构中多次来回导航。但是当他们到达第 6 页时,就会出现一个按钮。在按钮中单击它应该将用户导航到第二页。如何删除所有页面,即; 3,4,5 从堆栈中转到第 2 页。

我尝试了什么

点击按钮:

for (var i = 1; i < countPagesToRemove; i++)
{
    Navigation.RemovePage(Navigation.NavigationStack[Navigation.NavigationStack.Count - 2]);
}
await Navigation.PopAsync();

这个link 问同样的问题,但它对我不起作用。

然后我就这样尝试了

await PopupNavigation.Instance.PopAsync();
Application.Current.MainPage = new NavigationPage(new NCDashboard());

它将导航到第二页,但由于堆栈中没有任何内容,因此不会显示返回到第一页的按钮。那么我该如何解决这个问题呢?任何帮助表示赞赏。

【问题讨论】:

  • 我试图从弹出窗口中调用第一个选项。 IE;第6页
  • @AndroDevil 您在按钮单击时尝试的代码,在使用Navigation.PushAsync 从一个页面导航到另一个页面时效果很好。我会用Rg.plugin.popup 做一些测试并尽快反馈。
  • @WendyZang-MSFT 我对参数“countPagesToRemove”感到困惑。这个参数是什么?
  • 在你的情况下,你想删除 3 页,所以: var countPagesToRemove = 3
  • @AndroDevil 我在 GitHub 上发布了我测试的代码。 github.com/WendyZang/Test/tree/master/Navigation_Page截图:imgur.com/17IalYA

标签: xamarin xamarin.forms


【解决方案1】:

您正在从第 6 页(即 Rg.Popups PopupPage)调用 RemovePage。正如我们在 cmets 中所讨论的,Rg.Popups PopupPage 不会与常规 Xamarin.Forms 页面进入相同的堆栈。您需要获取从 1 到 5 的页面所在的堆栈的引用并在其上执行 RemovePage。尝试以下解决方法:

    var mainPage = (Application.Current.MainPage as NavigationPage);
    for (var i = 1; i < countPagesToRemove; i++)
    {

     mainPage.Navigation.RemovePage(mainPage.Navigation.NavigationStack[mainPage.Navigation.NavigationStack.Count - 2]);
    }
    await Navigation.PopAsync();

【讨论】:

    【解决方案2】:

    更新:

    Page6 上的代码运行良好。

        protected override void OnAppearing()
        {
            base.OnAppearing();
            for (var i = 1; i <= 3; i++)
            {
                Navigation.RemovePage(Navigation.NavigationStack[Navigation.NavigationStack.Count - 1]);
            }
        }
        private async void Button_Clicked(object sender, EventArgs e)
        {                    
            await PopupNavigation.PopAsync();
        }
    

    【讨论】:

    • 兄弟感谢您的回复。就我而言,第 6 页只有 Rg.Popup。所有其他页面都是普通页面。
    • 我认为您也应该尝试此解决方案。如果它按预期工作,那将是一个更好的解决方案,因为它不对 Application.Current.MainPage 的类型做出假设
    猜你喜欢
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2013-10-11
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    相关资源
    最近更新 更多