Xamarin表单的棱镜 - 从标签页导航

eri*_*rin 4 prism xamarin.forms

(使用Prism 6.1.0-pre6和XF 2.3.0.107)

简介:从TabbedPage导航到ContentPage不会显示工具栏/操作栏.

我从另一个页面导航到TabbedPage(MainPage.xaml).这看起来像这样:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:Or.Console.Views"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             prism:ViewModelLocator.AutowireViewModel="True"
             x:Class="Or.Console.Views.MainPage">
  <local:APage/>
  <local:BPage/>
  <local:CPage/>
</TabbedPage>
Run Code Online (Sandbox Code Playgroud)

在APage的ViewModel中,我正在打电话

_navigationService.NavigateAsync("DetailsPage");
Run Code Online (Sandbox Code Playgroud)

DetailsPage只是一个ContentPage,我希望它会显示顶部的后退按钮和操作栏,但事实并非如此.

我猜这是因为Prism不知道tab子页面,只知道TabbedPage本身.

我已经尝试使用Prism注册选项卡子页面,但这似乎不起作用.还尝试在NavigationPage中包装每个tab子项,但这会带来一些带有重复工具栏的奇怪行为.

从标签内容导航的正确方法是什么?

编辑:回应Brian Lagunas的回答,我尝试将TabbedPage包装在NavigationPage中,所以当我导航到它时,我正在调用

 _navigationService.NavigateAsync("DeviceNavWrapper/MainPage");
Run Code Online (Sandbox Code Playgroud)

但这给出了一个奇怪的结果: 在此输入图像描述

EDIT2:我的案例中的解决方案最终我需要从appage调用NavigateAsync并将useModalNavigation设置为false.所以现在APage有这个:

_navigationService.NavigateAsync("DetailsPage", null, false);
Run Code Online (Sandbox Code Playgroud)

Bri*_*nas 5

获取顶部后退按钮的唯一方法是将页面嵌套在NavigationPage中.这是标准的Xamarin.Forms行为.所以你有几个选择.一种是将您的APage包装在NavigationPage中.然后,当您从APageViewModel调用NavigateAsync("DetailsPage")时,它将按您的意愿工作.

编辑:如果要导航到完全不同的页面并替换TabbedPage,请确保TabbedPaged包装在NavigationPage中,并从TabbedPageViewModel导航.