(使用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>
在APage的ViewModel中,我正在调用
_navigationService.NavigateAsync("DetailsPage");
DetailsPage只是一个ContentPage,我希望它会显示在顶部的后退按钮和操作栏,但它没有。
我猜这是因为Prism不知道tab子页面,只知道TabbedPage本身。
我尝试使用Prism注册标签子页面,但这似乎不起作用。还试图在NavigationPage中包装每个tab子项,但是这会带来一些带有重复工具栏的奇怪行为。
从标签内容中导航的正确方法是什么?
修改: 为了回应Brian Lagunas的回答,我尝试将TabbedPage包装在NavigationPage中,所以当我导航到它时,我正在调用
_navigationService.NavigateAsync("DeviceNavWrapper/MainPage");
EDIT2 :我的案例中的解决方案最终我需要从appage调用NavigateAsync并将useModalNavigation设置为false。所以现在APage有这个:
_navigationService.NavigateAsync("DetailsPage", null, false);
答案 0 :(得分:5)
获取顶部后退按钮的唯一方法是将页面嵌套在NavigationPage中。这是标准的Xamarin.Forms行为。所以你有几个选择。一种是将您的APage包装在NavigationPage中。然后,当您从APageViewModel调用NavigateAsync(“DetailsPage”)时,它将按您的意愿工作。
编辑:如果要导航到完全不同的页面并替换TabbedPage,请确保TabbedPaged包装在NavigationPage中,然后从TabbedPageViewModel导航。
答案 1 :(得分:1)
为了消除重复的工具栏,我发现了解决方法
zstd
的NavigationPage Wrapper更容易