c# - 在 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
堆栈中没有模态的方法。
解决方案
推荐阅读
- html - 为什么 pdf 文档下载而不是显示在嵌入/iframe 中?
- javascript - 将键值对象转换为单个数组
- spring - 休眠用户实体和地址实体之间的一对多注释,在地址表中我没有与用户ID的关联
- django - 具有自定义用户应用程序身份验证的 django api
- c# - c# REST Controller 接受复杂对象属性的名称范围
- python - 如何在右对齐的情况下每行仅打印 3 个值?
- android - 如何使用 ActivityResultLauncher.GetContent() 请求多个 MIME 类型?
- google-chrome - 铬恐龙游戏中的复活节彩蛋
- javascript - 当输入为整数时, moment().isValid 返回 true
- python - python) 如何解决这个非类型问题?