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
关闭后,它将不再在导航堆栈中。
使用 messaging
或 TaskCompletionSource
来专门响应某种类型的响应或操作然后触发,即如果需要导航到 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 预发布版本,看看它是否能解决问题。
我的导航页面有以下页面流程:(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
关闭后,它将不再在导航堆栈中。
使用 messaging
或 TaskCompletionSource
来专门响应某种类型的响应或操作然后触发,即如果需要导航到 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 预发布版本,看看它是否能解决问题。