NavigationPage

时间:2017-06-19 05:00:07

标签: xamarin.forms prism

我在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);
    }
}

我再次可以将每个细节页面都没有问题,汉堡菜单存在,我可以打开母版页面查看用于导航的按钮。一旦我在那里,我就无法向后导航。这是我应该自己连接的东西吗?

4 个答案:

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