【问题标题】:What's the default font family?什么是默认字体系列?
【发布时间】:2017-05-20 16:53:04
【问题描述】:

这会返回null

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

还有这个:

DefaultFontFamily = new Label().FontFamily;

正确的做法是什么?

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    没有正确的方法 - 因为这里没有跨平台的“默认字体系列”,而且它是特定于平台的。

    为了进一步详细说明,想参考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; }
    }
    

    所以如果FontFamilynull,那么它是xamarin表单生态系统中的默认值


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

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

    有关用于Label 的本机控件的更多详细信息 - 您可以参考此link

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 2019-03-22
      • 2019-12-30
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 2013-04-09
      相关资源
      最近更新 更多