我在Xamarin.Forms 2.3.4.247项目中使用Prism.Forms 6.3。当我导航到主/细节设置中的详细信息页面时,我很难跟踪为什么后退箭头按钮不可见。
我可以很好地导航到页面,但后退按钮从不显示。相反,汉堡包菜单图标始终可见。这是我的“主人”页面。
<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:FloatSink.Apps.Mobile.Views.ValueConverters"
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
x:Class="FloatSink.Apps.Mobile.Views.MainPage"
BackgroundColor="Blue">
<MasterDetailPage.Master>
<ContentPage Title="Menu">
<StackLayout Padding="40">
<Label Text="Hello" />
<Button Text="Feed" Command="{Binding NavigateCommand}" CommandParameter="NavigationPage/FeedPage" />
<Button Text="Options" Command="{Binding NavigateCommand}" CommandParameter="NavigationPage/OptionsPage" />
</StackLayout>
</ContentPage>
</MasterDetailPage.Master>
</MasterDetailPage>
这是我的两个详细信息页面。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="FloatSink.Apps.Mobile.Views.FeedPage">
<Label Text="Hello from Feed Page!" />
</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="FloatSink.Apps.Mobile.Views.OptionsPage">
<Label Text="Hello from Options Page!" />
</ContentPage>
我使用{1}中的导航服务,使用我的母版页中指定的CommandParameter
导航到它。
MainPageViewModel
我在应用启动期间设置了private void NavigateToPage(string uri)
{
this.navigationService.NavigateAsync(uri);
}
这样的设置,因此我首先登陆NavigationPage
,然后我可以导航到FeedPage
。
OptionsPage
与导航相关的DI注册在此模块中完成:
public class App : PrismApplication
{
public App(IPlatformInitializer dependencyRegister) : base(dependencyRegister) { }
protected override void OnInitialized()
{
base.NavigationService.NavigateAsync("MainPage/NavigationPage");
}
protected override void RegisterTypes()
{
var builder = new ContainerBuilder();
builder.RegisterModule<NavigationRegistration>();
builder.RegisterModule<ServicesRegistration>();
base.Container.RegisterTypeForNavigation<NavigationPage>();
// This is deprecated but we have to wait for Prism.Autofac to update itself
builder.Update(base.Container);
}
}
我再次可以将每个细节页面都没有问题,汉堡菜单存在,我可以打开母版页面查看用于导航的按钮。一旦我在那里,我就无法向后导航。这是我应该自己连接的东西吗?
答案 0 :(得分:2)
我不确定我正在读你的问题,但听起来这是正常行为。在我对XF / Prism的短暂体验中,来自主人的每个导航都是堆栈的开始。如果您要添加其他页面,例如从Master-&gt; PageA-&gt; PageB,我希望Page A有汉堡菜单,但去PageB会给你后箭头。
答案 1 :(得分:1)
要在uri中使用NavigationPage
,您应该在App.xaml.cs
注册它以进行导航:
protected override void RegisterTypes()
{
// your registrations
Container.RegisterTypeForNavigation<NavigationPage>();
}
我大多数情况下都是这个原因。
答案 2 :(得分:0)
导航到母版页
"/MasterPage/NavigationPage/ViewA"
从 ViewA 和后退按钮导航出母版页
"ViewB"
答案 3 :(得分:-1)
您需要使用MainPage = new NavigationPage(new StartPage())启动您的应用程序;这就是它在正常情况下的解决方法。所以也许尝试注册包装在NavigationPage中的MainPage。