如何为xamarinfforms应用程序设置自定义字体



我试图在app.xaml中使用style为整个xamarin表单应用程序设置自定义字体。但是我得到了未处理的异常。

<OnPlatform x:Key="AppFontFamily" x:TypeArguments="x:String"
      Android="customfont.otf#CustomFont-Regular">
</OnPlatform>
<Style x:Key="labelFont" TargetType="Label">
        <SetterProperty Property="FontFamily" Value="{StaticResource AppFontFamily}"></SetterProperty>
      </Style>

在我的内容页中使用style

<Label Style="{StaticResource labelFont}"></Label>

有解决方案吗?

如果你想使用字体文件为所有标签设置字体,你需要创建一个自定义渲染器。在这里,像这样重写OnElementChanged:

 protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        try
        {
            Typeface font = Typeface.CreateFromAsset(Forms.Context.Assets, path);
            Control.Typeface = font;
        }
        catch(Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Unable to make typeface:" + ex);
        }
    }

然而,如果你想能够为每个标签设置自定义字体,你需要创建(在pcl中)一个自定义标签类,继承label,并添加一个font属性(准确地说-属性,你将用来传递字体文件的路径)。

public static readonly BindableProperty CustomFontProperty =
        BindableProperty.Create(
            "CustomFont",
            typeof(string),
            typeof(CustomLabel),
            default(string));
    public string CustomFont
    {
        get { return (string)GetValue(CustomFontProperty); }
        set { SetValue(CustomFontProperty, value); }
    }

然后在你的渲染器中,你可以像这样读取这个属性:

var label = Element as CustomLabel;
string path = label.CustomFont;

请注意,Android中的path使用'/'作为分隔符,而不是'。’就像在form里一样。

相关内容

  • 没有找到相关文章

最新更新