Применить пользовательский шрифт на этикетке в xamarin.iOS - PullRequest
0 голосов
/ 18 мая 2018

Я хочу применить стиль шрифта Montserrat-Light ко всем ярлыкам и записям, я делаю это, создавая средства визуализации элементов управления.EntryRenderer работает нормально, но LabelRenderer выдает ArgumentNullException с сообщением: значение не может быть нулевым.

  [assembly: ExportRenderer(typeof(Label), typeof(ExtendedLabelRenderer))]
namespace NewApp.iOS.Renderer
{
public class ExtendedLabelRenderer : LabelRenderer
{

    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        if (e.NewElement != null)
        {

            Control.Font = UIFont.FromName("Montserrat-Light", 10f);

        }
    }
}
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

В качестве более простого подхода к этой проблеме я хотел бы порекомендовать элемент Label и / или CustomFontEffect бесплатного пакета NuGet с открытым исходным кодом Forms9Patch.Он позволяет вам сохранить свой собственный шрифт в качестве встроенного ресурса в кроссплатформенном проекте приложения Xamarin.Forms (.NetStandard, PCL или Shared Library) и затем установить идентификатор встроенного ресурса этого шрифта как FontFamily для любого элемента Xamarin.Forms.который имеет свойство FontFamily.

var entry = new Xamarin.Forms.Entry {
    Text = "Xamarin.Forms.Entry element",
    FontFamily = "Forms9PatchDemo.Resources.Fonts.Pacifico.ttf"
};
entry.Effects.Add(Effect.Resolve("Forms9Patch.CustomFontEffect"));

var label = new Forms9Patch.Label
{
    Text = "Custom Font Text",
    FontFamily = "Forms9PatchDemo.Resources.Fonts.Pacifico.ttf"
}

Полное раскрытие: я являюсь автором этого пакета.

0 голосов
/ 18 мая 2018

Попробуйте код ниже.Он будет обновляться, если вы не указали семейство шрифтов и размер в своем XAML.Теперь вы также можете установить в свой XAML.

 public class CustomLabelRender : LabelRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
        {
            if (e.NewElement != null)
            {
                if (!String.IsNullOrEmpty(Element.FontFamily))
                    Control.Font = UIFont.FromName(this.Element.FontFamily, (nfloat)e.NewElement.FontSize);
            }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...