这会返回null
:
DefaultFontFamily = Font.SystemFontOfSize(NamedSize.Default).FontFamily;
以及:
DefaultFontFamily = new Label().FontFamily;
这样做的正确方法是什么?
答案 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; }
}
因此,如果FontFamily
为null
,那么它就是xamarin表单生态系统中的默认 。
当Label
在特定平台上呈现时,除非将FontFamily
属性从'null'
专门修改为某个值,否则本机控件上的font属性永远不会被修改。因此,本机控件使用该平台的默认字体系列进行渲染。
要获得默认字体,您必须implement native-services, and use dependency-injection才能获得该值。
有关Label
使用的原生控件的详细信息,请参阅此link。