什么是默认字体系列?

时间:2017-05-20 16:53:04

标签: xamarin xamarin.forms

这会返回null

DefaultFontFamily = Font.SystemFontOfSize(NamedSize.Default).FontFamily;

以及:

DefaultFontFamily = new Label().FontFamily;

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

没有正确的方法 - 因为没有跨平台的默认字体系列'拉起来,以及它是特定于平台的事实。

为了进一步详细说明,想在Label的源代码中定义此属性,

public static readonly BindableProperty FontFamilyProperty = FontElement.FontFamilyProperty;

反过来引用FontElement中定义的依赖属性,

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

或您引用SystemFontOfSize的静态方法。

public static Font SystemFontOfSize(NamedSize size)
{
    var result = new Font { NamedSize = size };
    return result;
}

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

同样适用于Font.Default。在进一步挖掘时,您会遇到IsDefault,其定义如下:

public bool IsDefault
{
    get { return FontFamily == null && FontSize == 0 && NamedSize == NamedSize.Default && FontAttributes == FontAttributes.None; }
}

因此,如果FontFamilynull,那么它就是xamarin表单生态系统中的默认

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

要获得默认字体,您必须implement native-services, and use dependency-injection才能获得该值。

有关Label使用的原生控件的详细信息,请参阅此link