我正在使用Prism库创建Xamarin表单应用程序。 页面结构如下:
我的目标是: 应用程序启动,用户在MyFirstPage中看到选项卡和ListView。 当用户点击任何项目时-应该显示MySecondPage,并且用户可以在导航栏中看到后退按钮,这将使他返回MyFirstPage。
在下面的示例中,我尝试做的事情和得到的结果:
1。
//when app started
_prismNavService.NavigateAsync(new System.Uri(@"/MyTabbedPage?selectedTab=MyFirstPage", UriKind.Absolute));
//when item in listview tapped
_prismNavService.NavigateAsync("MySecondPage", parameters: param);
结果: 显示第二页,但顶部没有导航栏
2。
_prismNavService.NavigateAsync(new System.Uri(@"/MyTabbedPage?selectedTab=MyFirstPage", UriKind.Absolute));
_prismNavService.NavigateAsync("NavigationPage/MySecondPage", parameters: param);
结果: 第二页具有导航栏,设备的后退按钮可将用户返回MyFirstPage,但导航栏上没有后退按钮(向左箭头)
3。
_prismNavService.NavigateAsync(new System.Uri(@"/MyTabbedPage?selectedTab=MyFirstPage", UriKind.Absolute));
_prismNavService.NavigateAsync("MySecondPage", param, false); //useModalNavigation : false
结果: 第二页不显示
4。
_prismNavService.NavigateAsync(new System.Uri(@"/MyTabbedPage?selectedTab=MyFirstPage", UriKind.Absolute));
When tapped:
_prismNavService.NavigateAsync("MySecondPage", param, true);
结果: 第二页具有导航栏,设备的后退按钮可将用户返回MyFirstPage,但导航栏上没有后退按钮(向左箭头)
5。
_prismNavService.NavigateAsync(new System.Uri(@"/NavigationPage/MyTabbedPage/MyFirstPage", UriKind.Absolute));
_prismNavService.NavigateAsync("MySecondPage", param, false); //useModalNavigation : false
结果: 第二页具有导航栏,设备的后退按钮从App中消失,导航栏上没有后退按钮(向左箭头)
6。
_prismNavService.NavigateAsync(new System.Uri(@"/MyTabbedPage/NavigationPage/MyFirstPage", UriKind.Absolute));
_prismNavService.NavigateAsync("MySecondPage", param, false); //useModalNavigation : false
结果: 第二页不显示
有人可以解释应该采用哪种结构和导航以使其正常工作吗?
答案 0 :(得分:0)
您需要将要显示的页面放在NavigationPage的选项卡中,然后当您从选项卡导航到子页面时,请确保您正在执行操作,以使其添加到堆栈中而不是在其上弹出模式。
例如,如果您要使用查询字符串动态创建制表符
await NavigationService.NavigateAsync("MainPageTabbed?createTab=NavigationPage|ViewsA&createTab=NavigationPage|ViewB");
从ViewA标签导航到子页面时
await NavigationService.NavigateAsync("SomeChildPage");
请确保在动态创建选项卡时使用管道|以便将NavigationPage与要显示的标签页分开,并且在导航时,导航路径的开头没有/。
如果在XAML中静态创建标签页,则同样可以实现
<TabbedPage>
<NavigationPage Title="View A">
<x:Arguments>
<local:ViewA Title="View A" />
</x:Arguments>
</NavigationPage>
</TabbedPage>