Prism for Xamarin Forms - 从标签页导航
Prism for Xamarin Forms - Navigating from a tabbedpage
(使用 Prism 6.1.0-pre6 和 XF 2.3.0.107)
摘要:从 TabbedPage 导航到 ContentPage 不显示 toolbar/actionbar。
我从另一个页面导航到 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 不知道选项卡子页面,只知道 TabbedPage 本身。
我试过用 Prism 注册选项卡子页面,但这似乎不起作用。还尝试将每个选项卡子项包装在 NavigationPage 中,但这会带来一些带有重复工具栏的奇怪行为。
从标签内容中导航的正确方法是什么?
编辑:
作为对 Brian Lagunas 回答的回应,我尝试将 TabbedPage 包装在 NavigationPage 中,因此当我导航到它时,我正在调用
_navigationService.NavigateAsync("DeviceNavWrapper/MainPage");
但这给出了一个奇怪的结果:
EDIT2:在我的案例中,解决方案最终是我需要从 APage 调用 NavigateAsync,并将 useModalNavigation 设置为 false。所以现在 APage 有这个:
_navigationService.NavigateAsync("DetailsPage", null, false);
在顶部获得后退按钮的唯一方法是将页面嵌套在 NavigationPage 中。这是标准的 Xamarin.Forms 行为。所以你有几个选择。一种是将您的 APage 包装在 NavigationPage 中。然后,当您从 APageViewModel 调用 NavigateAsync("DetailsPage") 时,它会如您所愿地工作。
编辑:如果您想导航到完全不同的页面并替换 TabbedPage,请确保 TabbedPaged 包装在 NavigationPage 中,并从 TabbedPageViewModel 导航。
为了消除重复的工具栏,我发现设置
NavigationPage.HasNavigationBar="False"
NavigationPage Wrapper 更简单
(使用 Prism 6.1.0-pre6 和 XF 2.3.0.107)
摘要:从 TabbedPage 导航到 ContentPage 不显示 toolbar/actionbar。
我从另一个页面导航到 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 不知道选项卡子页面,只知道 TabbedPage 本身。
我试过用 Prism 注册选项卡子页面,但这似乎不起作用。还尝试将每个选项卡子项包装在 NavigationPage 中,但这会带来一些带有重复工具栏的奇怪行为。
从标签内容中导航的正确方法是什么?
编辑: 作为对 Brian Lagunas 回答的回应,我尝试将 TabbedPage 包装在 NavigationPage 中,因此当我导航到它时,我正在调用
_navigationService.NavigateAsync("DeviceNavWrapper/MainPage");
但这给出了一个奇怪的结果:
EDIT2:在我的案例中,解决方案最终是我需要从 APage 调用 NavigateAsync,并将 useModalNavigation 设置为 false。所以现在 APage 有这个:
_navigationService.NavigateAsync("DetailsPage", null, false);
在顶部获得后退按钮的唯一方法是将页面嵌套在 NavigationPage 中。这是标准的 Xamarin.Forms 行为。所以你有几个选择。一种是将您的 APage 包装在 NavigationPage 中。然后,当您从 APageViewModel 调用 NavigateAsync("DetailsPage") 时,它会如您所愿地工作。
编辑:如果您想导航到完全不同的页面并替换 TabbedPage,请确保 TabbedPaged 包装在 NavigationPage 中,并从 TabbedPageViewModel 导航。
为了消除重复的工具栏,我发现设置
NavigationPage.HasNavigationBar="False"
NavigationPage Wrapper 更简单