首页 > 解决方案 > 在 Xamarin.Forms 中弹出多个模式的过程是什么?

问题描述

我正在创建一个Navigation.PushModalAsync()用于忘记密码页面的 Xamarin.Forms 移动应用程序。验证用户后,我使用一秒钟Navigation.PushModalAsync()来加载页面以实际重置密码。

第一页上的取消按钮可以正常工作Navigation.PopModalAsync(),但我不知道如何从堆栈中删除第一个 Modal。当我尝试使用Navigation.PopToRootAsync或 kludgy (从https://forums.xamarin.com/discussion/comment/346393/#Comment_346393Navigation.RemovePage(Navigation.ModalStack.ElementAt(Navigation.ModalStack.Count -1))稍作修改)时,会引发异常:

System.InvalidOperationException: 'RemovePage 在 Android 上不受全球支持,请使用 NavigationPage。'

或者

System.InvalidOperationException: 'PopToRootAsync 在 Android 上不受全球支持,请使用 NavigationPage。'

我的 App.xaml.cs 类具有以下内容:

public App()
        {
            InitializeComponent();
            
            MainPage = new NavigationPage(new LoginPage());
        }

我正在尝试返回LoginPage,但我想从堆栈中弹出所有模态,以便 Android 设备上的后退按钮不会再次加载模态。

我还尝试了How to remove a modal page from NavigationStack in Xamarin.Forms 中的步骤,这使我的 App.xaml.cs 类:

var navPage = new NavigationPage(new LoginPage());
            NavigationPage.SetHasNavigationBar(navPage.CurrentPage, false);
            MainPage = navPage;

但我仍然遇到同样的错误。

我的第二个模式页面中的调用是:

private async void CancelResetPasswordButton_Clicked(object sender, EventArgs e)
        {
            var answer = await DisplayAlert("Exit Password Reset?", "Are you sure you wish to exit the password reset process?", "Yes", "No");

            if (answer)
            {
                Navigation.RemovePage(Navigation.ModalStack.ElementAt(Navigation.ModalStack.Count - 1));
                await Navigation.PopModalAsync();
            }
        }

我已经用 替换了如果选择 Yes 会发生什么await Navigation.PopToRootAsync();,并且错误再次出现。

我确信这可能很简单,但我没有看到弹出两个模态以返回到LoginPage堆栈中没有模态的方法。

标签: c#xamarin.formsxamarin.androidmodal-dialog

解决方案


推荐阅读