Как изменить шрифт всех элементов панели инструментов в заголовке навигации в Xamarin - PullRequest
0 голосов
/ 11 октября 2019

Я создал пользовательскую страницу навигации в xamarin, чтобы изменить шрифт элементов панели инструментов на панели навигации.

Все прошло хорошо, однако шрифт меняется не на всех элементах панели инструментов, только напоследний по какой-то причине.

Icons

Как вы можете видеть, я также пытался изменить цвет на красный, кроме шрифта, однако это работает только для последнего элементаaswell.

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

Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 12 октября 2019

NavigationRenderer является UINavigationController в iOS , поэтому вы можете сделать следующее:

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
}

Это будет перечислять каждые UINavigationItem для этого UINavigationController, а затем принимать каждый UIBarButtonItem связанных с ними.

0 голосов
/ 17 октября 2019

Мне наконец-то удалось заставить это работать благодаря некоторой помощи @ 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!

Спасибо:)

...