为什么我的`Label`渲染器字体样式没有应用于Xamarin Forms中的Label文本?

时间:2017-06-26 13:01:01

标签: c# xaml xamarin.ios xamarin.forms

我创建了一个使用Label字体样式的UIFontTextStyle.Body渲染器。

public class LabelBodyCustomRenderer : LabelRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
            Control.Font = UIFont.GetPreferredFontForTextStyle(UIFontTextStyle.Body);
    }
}

然后我在XAML中使用它,如下所示:

<local:LabelBodyRendererClass x:Name="numberAnswerLabel" />

并填充Label中的C#文字:

numberAnswerLabel.Text = App.noa.Text() + " correct";

这样做,UIFontTextStyle.Body不会应用于标签,但如果我在Label一侧填充XAML的文字,如:

<local:LabelBodyRendererClass Text="sample text" />

然后应用字体样式。

任何人都知道为什么它会像这样工作?以及如何修复它以便使用样式?

1 个答案:

答案 0 :(得分:3)

由于某种原因,只要字体的文本或任何相关属性发生变化,就会重置字体。

因此您必须处理TextChanged事件,然后重新应用字体。在FormsCommunityToolkit中查看我的代码。

每当其中一个属性发生变化时,我再次应用新字体:

if (e.PropertyName == Label.TextColorProperty.PropertyName
                    || e.PropertyName == Label.FontProperty.PropertyName
                    || e.PropertyName == Label.TextProperty.PropertyName
                    || e.PropertyName == Label.FormattedTextProperty.PropertyName)
{
    control.Font = UIFont.FromName (_effect.FontFamilyName, control.Font.PointSize);
}

它与“虫子”有关。报告here