繁体   English   中英

如何在 Xamarin 中更改导航 Header 中所有工具栏项的字体

[英]How to change the font of all Toolbar Items in Navigation Header in Xamarin

我在 xamarin 中创建了一个自定义导航页面,以更改导航栏中工具栏项的字体。

一切顺利,但是所有工具栏项目的字体都没有改变,出于某种原因只是最后一个。

图标

如您所见,我还尝试将颜色更改为红色,但字体除外,但这也仅适用于最后一项。

XAML:

<ContentPage.ToolbarItems>
    <ToolbarItem x:Name="MenuItem1"
                 Order="Primary"
                 Text="x1"
                 Priority="0" />
    <ToolbarItem x:Name="MenuItem2"
                 Order="Primary"
                 Text="x2"
                 Priority="1" />
    <ToolbarItem x:Name="MenuItem3"
                 Order="Primary"
                 Text="x3"
                 Priority="2" />
    <ToolbarItem x:Name="MenuItem4"
                 Order="Primary"
                 Text="x4"
                 Priority="3" />
</ContentPage.ToolbarItems>

iOS:

public class FontAwesomeNavigationPageRenderer : NavigationRenderer
{
    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);

        if(e.NewElement != null)
        {
            var att = new UITextAttributes
            {
                Font = UIFont.FromName("FontAwesome5Pro-Light", 18),
                TextColor = UIColor.Red
            };

            UIBarButtonItem.Appearance.SetTitleTextAttributes(att, UIControlState.Normal);
        }
    }
}

我错过了什么?

NavigationRenderer 是 iOS 中的 UINavigationController ,因此您可以执行以下操作:

var navController = this as UINavigationController;
var navigationItems = navController.NavigationBar.Items)
List<UIBarButtonItem> barButtonItems = new List<UIBarButtonItem>();

foreach(UINavigationItem item in navigationItems) {
    barButtonItems.AddRange(item.NavigationBar.leftBarButtonItems);
    barButtonItems.AddRange(item.NavigationBar.rightBarButtonItems);
}

foreach(UIBarButtonItem bbItem in barButtonItems) {
    //change appearance for each bbItem
}

这将列出此UINavigationController的每个UINavigationItem ,然后获取与它们关联的每个UIBarButtonItem

多亏了上面评论中@iSpain17 的一些帮助,我终于设法完成了这项工作。

下面是我的 iOS 部分的代码

public override void ViewDidAppear(bool animated) {
    base.ViewDidAppear(animated);

    SetNavigationButtonsPage();
}

private void SetNavigationButtonsPage()
{
    var att = new UITextAttributes
    {
        Font = UIFont.FromName("FontAwesome5Pro-Light", 16),
    };

    var navigationItems = (this as UINavigationController).NavigationBar.Items;
    List<UIBarButtonItem> barButtonItems = new List<UIBarButtonItem>();

    foreach (UINavigationItem item in navigationItems)
    {
        barButtonItems.AddRange(item.LeftBarButtonItems);
        barButtonItems.AddRange(item.RightBarButtonItems);
    }

    foreach (UIBarButtonItem bbItem in barButtonItems)
    {
        //change appearance for each bbItem
        bbItem.SetTitleTextAttributes(att, UIControlState.Normal);
    }
}

解决方案是将使用的方法从 OnElementChanged 更改为 ViewDidAppear!

谢谢你:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM