2017-05-20 69 views
0

这将返回null什么是默认字体系列?

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

除了这一点:

DefaultFontFamily = new Label().FontFamily; 

怎样做正确的方式?

回答

2

没有正确的方法来做到这一点 - 因为在这里没有跨平台的“默认字体家族”,而且这是平台特定的事实。

为了进一步在此详细描述,要提及此属性在用于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; } 
} 

所以,如果FontFamilynull,那么它是在xamarin形式的生态系统中的默认


Label不会获取在特定平台上呈现,那么除非其FontFamily属性是专门从'null'修改为某个值,在本机控制字体属性也从未改变。所以本地控件使用该平台的默认字体系列呈现。

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

有关用于Label的本机控件的更多详细信息,请参阅此link

相关问题