首页 > 解决方案 > Xamarin 表单 NavigationPage.TitleView 需要在所有页面上

问题描述

我有一个 NavigationPage.TitleView ,其中包含带有图像的标签,如果我想在我的所有页面上都将它添加到 MasterDetailPage 中吗?NavigationPage 在 MasterDetailPage 上不可用,如果我将它添加到我的菜单页面,它将不会显示。它将从默认主页显示的唯一页面?

主页.xaml

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


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

主页.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>

标签: c#xamarinxamarin.forms

解决方案


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

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

}

推荐阅读