Xamarin Forms RemovePage 意外结果

Xamarin Forms RemovePage unexpected result

我的导航页面有以下页面流程:(1)LoginPage->(2)ForgotPasswordPage->(3)PasswordSentPage

我离开的那一刻(2)我想要它的NavigationStack,让后退按钮returns到(1)。

我在 (2) 中尝试过:

InsertPageBefore(pwSentPage, this); 
await Navigation.PopAsync().ConfigureAwait(false);

这会导致正确的页面,因为标题是正确的,但内容是 (1) 的内容。如果我按下后退按钮,内容会保留,但标题会改变...

我也在(3)中尝试过:

protected override void OnAppearing ()
{
    base.OnAppearing ();
    var prevPage = Navigation.NavigationStack.FirstOrDefault (p => p is ForgotPasswordPage);
    Navigation.RemovePage (prevPage);
}

在此处按后退按钮显示如下空白屏幕:

有人有想法吗?

你不能用PushModalAsync吗?

您可以将其放在 Login 页面上,并使用此调用显示 ForgotPasswordPage

完成后,它将 return 返回到 Login 页面并且不再位于导航堆栈中。

如果之后需要,您可以从 Login 页面导航到 PasswordSentPage

ForgotPasswordPage关闭后,它将不再在导航堆栈中。

使用 messagingTaskCompletionSource 来专门响应某种类型的响应或操作然后触发,即如果需要导航到 PasswordSentPage(如果页面没有已取消)。

正如您在问题中所说,您可以从 NavigationStack 中删除该页面。 这在我的项目中正常工作:

第一页 -> PushAsync -> 第二页 -> PushAsync -> 第三页

在第三页:

protected override void OnAppearing()
{
    base.OnAppearing();

    var secondPage = Navigation.NavigationStack.FirstOrDefault(p => p is SecondPage);
    Navigation.RemovePage(secondPage);
}

使用后退按钮或在 Ccde 中使用 PopAsync 的后退导航显示第一页。

请检查您的代码。以上解决方案应该适用于您的情况。 也许您在 OnAppearing 方法中做了一些事情。我创建了一个只有这 3 页的测试项目,其中没有其他内容,并且它有效。

我在这里做一个假设,但因为您似乎使用 material 设计和 RemovePage,您可能正在经历 this bug。试试最新的 2.1 预发布版本,看看它是否能解决问题。