什么是默认字体系列?
问题描述:
这将返回null
:什么是默认字体系列?
DefaultFontFamily = Font.SystemFontOfSize(NamedSize.Default).FontFamily;
除了这一点:
DefaultFontFamily = new Label().FontFamily;
怎样做正确的方式?
答
没有正确的方法来做到这一点 - 因为在这里没有跨平台的“默认字体家族”,而且这是平台特定的事实。
为了进一步在此详细描述,要提及此属性在用于Label
源代码中定义,
public static readonly BindableProperty FontFamilyProperty = FontElement.FontFamilyProperty;
这又是指依赖属性如0定义,
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)
其转化为空限定,并且在第二情况下,用于FontFamily
值永远不会设置)
也是一样的Font.Default
。在进一步的挖掘,你遇到IsDefault
其定义如下:
public bool IsDefault
{
get { return FontFamily == null && FontSize == 0 && NamedSize == NamedSize.Default && FontAttributes == FontAttributes.None; }
}
所以,如果FontFamily
是null
,那么它是在xamarin形式的生态系统中的默认。
当Label
不会获取在特定平台上呈现,那么除非其FontFamily
属性是专门从'null'
修改为某个值,在本机控制字体属性也从未改变。所以本地控件使用该平台的默认字体系列呈现。
为了获得该默认字体,您将必须implement native-services, and use dependency-injection才能获得该值。
有关用于Label
的本机控件的更多详细信息,请参阅此link。