Xamarin.forms 如何使用Prism.Forms实现入职页面?
我正在开发一个带有Prism的Xamarin.Forms应用程序,我想在其中加入一个入职页面(更具体地说是一个顶级用户利益页面,如下所示) 应用程序本身是围绕一个Xamarin.forms 如何使用Prism.Forms实现入职页面?,xamarin.forms,navigation,prism,Xamarin.forms,Navigation,Prism,我正在开发一个带有Prism的Xamarin.Forms应用程序,我想在其中加入一个入职页面(更具体地说是一个顶级用户利益页面,如下所示) 应用程序本身是围绕一个NavigationPage构建的,我可以用它导航 NavigationService.NavigateAsync("/NavigationRootPage/MainPage") 在我的应用程序()中。在第一次开始时,我想显示入职页面,而我有相当多的问题,让它正确 我的第一个方法是使用 _navigationService.Navig
NavigationPage
构建的,我可以用它导航
NavigationService.NavigateAsync("/NavigationRootPage/MainPage")
在我的应用程序()
中。在第一次开始时,我想显示入职页面,而我有相当多的问题,让它正确
我的第一个方法是使用
_navigationService.NavigateAsync("/NavigationRootPage/MainPage")
在我的viewmodel中,当用户单击Get Start!按钮这种工作方式也有点难看,因为这种绝对导航会立即破坏oboarding页面,而不会设置过渡动画。此外,在oboarding页面被破坏的那一刻,将构建主页
,这将花费一小部分时间,但值得注意。实际上,用户会注意到正在构建的主页
,它看起来一点也不平滑
我的第二种方法是从我的viewmodel以相对的方式导航
_navigationService.NavigateAsync("NavigationRootPage/MainPage")
对于过渡动画,这会更加平滑,动画完成后,主页
已经准备就绪。但同样有一个主要的缺点。您可以导航回onbaording页面,我们也不需要它。而且——据我所知——也没有(干净的)方法从导航堆栈中删除页面。我尝试在我的入职页面上调用PageUtility.DestroyPage
,但这只会让事情变得更糟,因为它似乎保留了页面,但破坏了viewmodel,导致按下“后退”按钮时,我的入职页面显示时没有数据
我的第三种方法根本不起作用,尽管对我来说似乎很有希望。在我的App()
中,我用主页推我的导航页面,然后推我的入职页面
NavigationService.NavigateAsync("/NavigationRootPage/MainPage");
NavigationService.NavigateAsync("OnboardingPage", useModalNavigation: true);
然后在我的viewmodel中
_navigationService.GoBackAsync(useModalNavigation: true)
但这种方法
- 显示了
,尽管onbaording页面应显示为模式页面导航页面的标题
- 拒绝
-调用此方法时,不会发生任何事情GoBackAsync
NavigateAsync
的第一次调用也没有改变任何内容
有些东西我试过了
- 在my viewmodel中使用
为ClearNavigationStackOnNavigation
true时实现
INavigationOptions
- 在显示my
后尝试设置NavigationPage
,但无效Application.MainPage
我相信这是编写应用程序时的一个常见要求。我错过了什么吗?或者我必须忍受其中的一个缺点吗?我已经找到了一个解决方案,它不是最漂亮的(实际上很难看),但很有效 在我的
MainPage
s视图模型中,我实现了INavigatingAware
,并以模式导航到我的OnboardingPage
public async void OnNavigatingTo(NavigationParameters parameters)
{
await _navigationService.NavigateAsync("LandingPage", useModalNavigation: true);
}
但是,使用删除moal页时
this._navigationService.GoBackAsync(useModalNavigation: true);
没有按预期工作。模式没有被删除(虽然从查看代码时它应该是这样工作的,但我没有设法用重新生成的PDB进行调试)。因此,我不得不采用丑陋(非MVVM)的方式,为按钮创建一个事件处理程序
private void Button_OnClicked(object sender, EventArgs e)
{
this.Navigation.PopModalAsync();
}
这将通过动画平稳地返回到myMainPage
,myMainPage
已启动并运行,但尚未在可见时建立
不过,我还是希望你能给我一个关于如何用棱镜的方法来做这件事的答案。我觉得你想得太多了。如果你想先显示你的Onborading页面,那就先导航到它
`导航同步(“导航页面/车载页面”)
或者,如果你想将主页放在堆栈中,那么用deeplink启动应用程序
`导航同步(“导航页面/主页/车载页面”)
如果您不想显示导航标题,只需在入职页面中将其隐藏即可
不要使用绝对导航,除非您想完全重置导航堆栈(相当于MainPage=newmainpage()
)。我可能想得太多了;)工作起来很有魅力,但我仍然想知道为什么我不能用GoBackAsync
关闭一个模态。我想这也解决了我刚刚要解决的另一个问题。非常感谢你