【发布时间】:2020-02-25 15:06:47
【问题描述】:
在我们的 Xamarin Forms 应用程序中,我们有多个页面。当我们第一次从主导航页面导航到另一个页面时,它会按预期工作。然后,当我们使用后退按钮(在应用程序或 Android 系统按钮中)并再次导航到下一页时,它不会加载。它更改了标题,但显示了一个空白页面。
您使用哪个页面作为要转到的第一页以及要转到的第二页是哪个页面都没有关系。如果第一页和第二页是同一页,它也不起作用。
在应用程序中我们初始化主页如下:
MainPage = new NavigationPage(new MainPage());
MainPage 是一个 TabbedPage。
我们只是这样导航:
if (Application.Current.MainPage is NavigationPage mainPage)
{
await mainPage.Navigation.PushAsync(new DetailPage());
}
这以前有效,但我认为在将 Xamarin.Forms 从 4.2.0.848062 更新到 4.3.0.947036 期间它坏了。但我找不到任何可以阻止这就是发行说明。
== 编辑 ==
我们发现所有导航调用都存在一些不一致的情况。所以我们创建了一个帮助类来完成所有的导航。现在看起来像这样:
public static class NavigationHelper
{
public static void NavigateTo(Page page)
{
if (Application.Current.MainPage is NavigationPage mainPage)
{
Device.BeginInvokeOnMainThread(async () =>
{
await mainPage.Navigation.PushAsync(page);
});
}
}
}
所以我们现在只能这样导航:
NavigationHelper.NavigateTo(new DetailPage());
但这仍然不能解决问题。第一次我们得到正确的页面,第二次导航我们得到一个空屏幕。导航栏中的标题正在更改为我们导航到的页面标题。但其余的都是空的。
【问题讨论】:
-
可以看到导航的结果,var result = await mainPage.Navigation.PushAsync(new DetailPage());然后检查结果,看看是否有任何异常
-
当我尝试做 var result = await mainPage.Navigation.PushAsync(new DetailPage());它给出了错误:'无法将 void 分配给隐式类型的变量'。 Xamarin.Forms.INavigation.PushAsync(Page page) 是一个任务。
-
对不起,我错了,PushAsync() 返回 void,这就是为什么你不能这样做,我正在将 prism 导航界面与此混合
-
这是个好主意。刚刚创建了一个新的选项卡式应用程序,将主页设置更改为 MainPage = new NavigationPage(new MainPage());,添加了导航助手并使用它来导航。没有问题。但是所以我仍然不知道为什么它在我们的应用程序中不起作用。
标签: xamarin xamarin.forms