Поиск…


замечания

Ресурсы для просмотра:

Доступ к обычным шрифтам в Силе

Xamarin.Forms предоставляют отличный механизм для стилизации вашего кросс-платформенного приложения с использованием глобальных стилей.

В мобильном мире ваше приложение должно быть красивым и выделяться из других приложений. Один из этих символов - пользовательские шрифты, используемые в приложении.

Благодаря поддержке питания XAML Styling в Xamarin.Forms только что созданный базовый стиль для всех этикеток с вашими пользовательскими шрифтами.

Чтобы включить пользовательские шрифты в iOS и Android, выполните руководство по использованию пользовательских шрифтов на iOS и Android с почтой Xamarin.Forms, написанной Джеральдом.

Объявите стиль в разделе ресурсов файла App.xaml. Это сделает все стили глобально видимыми.

Из вышеперечисленного Gerald нам нужно использовать свойство StyleId, но оно не является связующим свойством, поэтому для его использования в Style Setter нам нужно создать Attachable Property для него:

public static class FontHelper
{
    public static readonly BindableProperty StyleIdProperty =
        BindableProperty.CreateAttached(
            propertyName: nameof(Label.StyleId),
            returnType: typeof(String),
            declaringType: typeof(FontHelper),
            defaultValue: default(String),
            propertyChanged: OnItemTappedChanged);

    public static String GetStyleId(BindableObject bindable) => (String)bindable.GetValue(StyleIdProperty);

    public static void SetStyleId(BindableObject bindable, String value) => bindable.SetValue(StyleIdProperty, value);


    public static void OnItemTappedChanged(BindableObject bindable, object oldValue, object newValue)
    {
        var control = bindable as Element;
        if (control != null)
        {
            control.StyleId = GetStyleId(control);
        }
    }
}

Затем добавьте стиль в ресурс App.xaml:

<?xml version="1.0" encoding="utf-8" ?>
<Application xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:h="clr-namespace:My.Helpers"
             x:Class="My.App">

  <Application.Resources>

    <ResourceDictionary>
        <Style x:Key="LabelStyle" TargetType="Label">
            <Setter Property="FontFamily" Value="Metric Bold" />
            <Setter Property="h:FontHelper.StyleId" Value="Metric-Bold" />
        </Style>
    </ResourceDictionary>

  </Application.Resources>

</Application>

Согласно вышеприведенному сообщению, нам нужно создать Custom Renderer for Label, который наследуется от платформы LabelRenderer On Android.

internal class LabelExRenderer : LabelRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        if (!String.IsNullOrEmpty(e.NewElement?.StyleId))
        {
            var font = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, e.NewElement.StyleId + ".ttf");
            Control.Typeface = font;
        }
    }
}

Для платформы iOS не требуются специальные средства визуализации.

Теперь вы можете получить стиль в разметке вашей страницы:

Для конкретной метки

<Label Text="Some text" Style={StaticResource LabelStyle} />

Или примените стиль ко всем меткам на странице, создав стиль на основе LabesStyle

<!-- language: xaml -->

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="My.MainPage">

  <ContentPage.Resources>

    <ResourceDictionary>
        <Style TargetType="Label" BasedOn={StaticResource LabelStyle}>
        </Style>
    </ResourceDictionary>

  </ContentPage.Resources>

  <Label Text="Some text" />      

</ContentPage>


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow