You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何居中导航栏文本?保留页面标题且不破坏现有模板

导航栏标题居中解决方案(不修改显示文本)

方案1:通过TitleView绑定原有标题实现居中

不用替换整个导航栏模板,直接在TitleView里绑定页面原有Title属性,通过布局控件实现居中:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="YourApp.YourPage">
    <NavigationPage.TitleView>
        <Label Text="{Binding Title, Source={RelativeSource AncestorType={x:Type ContentPage}}}"
               HorizontalOptions="Center"
               VerticalOptions="Center"
               FontAttributes="Bold"
               FontSize="Large"/>
    </NavigationPage.TitleView>
    
    <!-- 页面主体内容 -->
</ContentPage>

这种方式完全保留原有Title的显示文本,同时通过Label的HorizontalOptions实现居中,还能按需自定义字体样式。

方案2:自定义渲染器实现全局居中(Xamarin.Forms)

如果需要所有页面导航栏标题统一居中,避免重复编写TitleView,可使用平台自定义渲染器:

Android端

[assembly: ExportRenderer(typeof(NavigationPage), typeof(CenteredTitleNavRenderer))]
namespace YourApp.Droid.Renderers
{
    public class CenteredTitleNavRenderer : NavigationRenderer
    {
        public CenteredTitleNavRenderer(Context context) : base(context) { }

        protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
        {
            base.OnElementChanged(e);
            if (e.NewElement != null)
            {
                var toolbar = FindViewById<AndroidX.AppCompat.Widget.Toolbar>(Resource.Id.toolbar);
                toolbar?.SetTitleCentered(true);
            }
        }
    }
}

iOS端

[assembly: ExportRenderer(typeof(NavigationPage), typeof(CenteredTitleNavRenderer))]
namespace YourApp.iOS.Renderers
{
    public class CenteredTitleNavRenderer : NavigationRenderer
    {
        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);
            NavigationBar?.SetTitleTextAttributes(new UIStringAttributes
            {
                Alignment = UITextAlignment.Center
            });
        }
    }
}

全局生效后,所有页面的导航栏标题会自动居中,完全不影响原有Title的设置逻辑。

方案3:MAUI Shell全局样式设置

如果是MAUI项目,直接在AppShell.xaml中配置全局样式:

<Shell.Resources>
    <Style TargetType="NavigationView">
        <Setter Property="TitleView">
            <Setter.Value>
                <Label Text="{Binding Title}"
                       HorizontalOptions="Center"
                       VerticalOptions="Center"/>
            </Setter.Value>
        </Setter>
    </Style>
</Shell.Resources>

同样通过绑定原有Title属性,实现全局导航栏标题居中。

内容的提问来源于stack exchange,提问作者Burning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:43:24