什么是默认字体系列?

use*_*767 3 xamarin xamarin.forms

这返回null

DefaultFontFamily = Font.SystemFontOfSize(NamedSize.Default).FontFamily;
Run Code Online (Sandbox Code Playgroud)

还有这个:

DefaultFontFamily = new Label().FontFamily;
Run Code Online (Sandbox Code Playgroud)

正确的做法是什么?

Sha*_*raj 6

没有正确的方法可以做到这一点 - 因为这里没有跨平台的“默认字体系列”,而且它是特定于平台的。

为了进一步详细说明,希望参考源代码中定义的此属性Label

public static readonly BindableProperty FontFamilyProperty = FontElement.FontFamilyProperty;
Run Code Online (Sandbox Code Playgroud)

反过来,它指的是 中定义的依赖属性FontElement

public static readonly BindableProperty FontFamilyProperty =
        BindableProperty.Create("FontFamily", typeof(string), typeof(IFontElement), default(string),
                                propertyChanged: OnFontFamilyChanged);
Run Code Online (Sandbox Code Playgroud)

或您提到的静态方法SystemFontOfSize

public static Font SystemFontOfSize(NamedSize size)
{
    var result = new Font { NamedSize = size };
    return result;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,在这两种情况下,根据源代码,'null'for的值FontFamily并不意外。(在第一种情况下,依赖属性定义为默认值 asdefault(string)转换为 null,在第二种情况下,FontFamily永远不会设置值)

也一样Font.Default。在进一步挖掘时,您会发现IsDefault其定义如下:

public bool IsDefault
{
    get { return FontFamily == null && FontSize == 0 && NamedSize == NamedSize.Default && FontAttributes == FontAttributes.None; }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果FontFamilynull,则它是xamarin 形式生态系统中的默认值


Label在特定平台上呈现时,除非它的FontFamily属性被专门修改'null'为某个值,否则本机控件上的字体属性也不会被修改。因此,本机控件使用该平台的默认字体系列呈现。

为了获得默认字体,您必须实现本机服务,并使用依赖注入来获取该值。

有关用于的本机控件的更多详细信息Label- 您可以参考此链接