Xamarin表单NavigationPage.TitleView必须在所有页面上

时间:2019-03-11 18:47:11

标签: c# xamarin xamarin.forms

我有一个NavigationPage.TitleView,其中包括带有图像的标签(如果我希望在所有页面上使用该图像)是否将其添加到MasterDetailPage中? NavigationPage在MasterDetailPage上不可用,如果我将其添加到菜单页面,它将不会显示。它会从默认主页显示的唯一页面是什么?

MainPage.xaml

<MasterDetailPage.Master>
    <pages:MenuPage x:Name="menuPage"/>
</MasterDetailPage.Master>


<MasterDetailPage.Detail>
    <NavigationPage>
        <x:Arguments>
            <pages:HomePage />
        </x:Arguments>
    </NavigationPage>
</MasterDetailPage.Detail>

HomePage.xaml

<NavigationPage.TitleView>

    <StackLayout Orientation="Horizontal" BackgroundColor="#22335c" >
        <Label Text="App Name" HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand" BackgroundColor="#22335c" TextColor="White" HorizontalTextAlignment="Center"  />
        <Image Source="icon.jpg"  Aspect="AspectFit"  BackgroundColor="#22335c" />
    </StackLayout>
</NavigationPage.TitleView>

1 个答案:

答案 0 :(得分:0)

您可以尝试创建自定义渲染器,并将其设置为应用程序中所有页面的基类。在此自定义渲染器中,您可以尝试将Label和图像源添加到导航栏。

public class NavigationRenderer : PageRenderer
{
    private CustomTitleView _titleView;
    public NavigationSearchRenderer(Context context) : base(context)
    {

    }
    protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
    {
        base.OnElementChanged(e);

        var navPage = Element as NavigationSearchPage;
        if (navPage == null)
            return;

        var activity = this.Context as FormsAppCompatActivity;
        if (activity == null)
            return;

        var toolbar = activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
        _titleView= new TitleView(Context);
        toolbar.AddView(_titleView);
    }

}