使用Prism Xamarin表单导航回到选项卡式页面

时间:2018-10-08 17:29:06

标签: xamarin.forms prism back-button navigationbar tabbedpage

我正在使用Prism库创建Xamarin表单应用程序。 页面结构如下:

  • MyTabbedPage:TabbedPage
  • MyFirstPage:ContentPage(它是MyTabbedPage的第一个孩子)
  • MySecondPage:ContentPage(单独的页面,不是MyTabbedPage的子级)

我的目标是: 应用程序启动,用户在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

结果:  第二页不显示

有人可以解释应该采用哪种结构和导航以使其正常工作吗?

1 个答案:

答案 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>