Suche…


Bemerkungen

Ressourcen zum Anschauen:

Zugriff auf benutzerdefinierte Schriftarten in Syles

Xamarin.Forms bieten einen hervorragenden Mechanismus zum Gestalten Ihrer plattformübergreifenden Anwendung mit globalen Stilen.

In der mobilen Welt muss Ihre Anwendung hübsch sein und sich von den anderen Anwendungen abheben. Eines dieser Zeichen sind benutzerdefinierte Schriftarten, die in der Anwendung verwendet werden.

Mit Power-Unterstützung für XAML Styling in Xamarin.Forms hat soeben einen Basisstil für alle Etiketten mit Ihren benutzerdefinierten Schriftarten erstellt.

Um benutzerdefinierte Schriftarten in Ihr iOS- und Android-Projekt aufzunehmen, folgen Sie der Anleitung in Benutzerdefinierte Schriftarten unter iOS und Android mit Xamarin.Forms- Beitrag von Gerald verwenden.

Deklarieren Sie den Stil im Ressourcenabschnitt der App.xaml-Datei. Dadurch werden alle Stile global sichtbar.

Von Geralds Beitrag oben müssen wir die StyleId-Eigenschaft verwenden, aber diese Eigenschaft ist nicht bindbar. Um sie in Style Setter verwenden zu können, müssen wir dazu eine Attachable-Eigenschaft erstellen:

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

Dann fügen Sie den Stil in der App.xaml-Ressource hinzu:

<?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>

Gemäß dem obigen Beitrag müssen wir einen benutzerdefinierten Renderer für Label erstellen, der von LabelRenderer On Android-Plattform erbt.

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

Für die iOS-Plattform sind keine benutzerdefinierten Renderer erforderlich.

Jetzt können Sie Stil in Ihrer Seitenmarkierung erhalten:

Für spezifische Beschriftung

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

Oder wenden Sie den Stil auf alle Beschriftungen auf der Seite an, indem Sie einen auf LabesStyle basierenden Stil erstellen

<!-- 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow