【发布时间】:2017-05-20 16:53:04
【问题描述】:
这会返回null:
DefaultFontFamily = Font.SystemFontOfSize(NamedSize.Default).FontFamily;
还有这个:
DefaultFontFamily = new Label().FontFamily;
正确的做法是什么?
【问题讨论】:
标签: xamarin xamarin.forms
这会返回null:
DefaultFontFamily = Font.SystemFontOfSize(NamedSize.Default).FontFamily;
还有这个:
DefaultFontFamily = new Label().FontFamily;
正确的做法是什么?
【问题讨论】:
标签: xamarin xamarin.forms
没有正确的方法 - 因为这里没有跨平台的“默认字体系列”,而且它是特定于平台的。
为了进一步详细说明,想参考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;
}
如您所见,在这两种情况下,根据源代码,FontFamily 的值 'null' 并不意外。 (在第一种情况下,依赖属性定义为默认值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' 专门修改为某个值,否则本机控件上的字体属性也永远不会修改。因此,本机控件使用该平台的默认字体系列呈现。
为了获得该默认字体,您必须implement native-services, and use dependency-injection 才能获得该值。
有关用于Label 的本机控件的更多详细信息 - 您可以参考此link。
【讨论】: