C# 为什么我的“标签”渲染器字体样式未应用于标签';Xamarin格式的文本?

C# 为什么我的“标签”渲染器字体样式未应用于标签';Xamarin格式的文本?,c#,xaml,xamarin.ios,xamarin.forms,C#,Xaml,Xamarin.ios,Xamarin.forms,我创建了一个使用uifontextstyle.Body字体样式的标签渲染器 public class LabelBodyCustomRenderer : LabelRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Label> e) { base.OnElementChanged(e); if (Control != null)

我创建了一个使用
uifontextstyle.Body
字体样式的
标签
渲染器

public class LabelBodyCustomRenderer : LabelRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
            Control.Font = UIFont.GetPreferredFontForTextStyle(UIFontTextStyle.Body);
    }
}
公共类LabelBodyCustomRenderer:LabelRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
Control.Font=UIFont.GetPreferredFontForTextStyle(UIFontTextStyle.Body);
}
}
然后我在
XAML
中使用它,如下所示:

并在
C#
中填充
标签的文本:

numberTranswerLabel.Text=App.noa.Text()+“正确”

这样做时,
uifontextstyle.Body
不会应用于标签,但如果我在
XAML
侧填充
标签的文本,则如下所示:

然后应用字体样式


有人知道为什么会这样吗?以及如何修复它以使用样式?

出于某种原因,每当文本或字体的任何关联属性发生更改时,字体都会重置

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

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

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);
}

它与报告的“bug”有关。

由于某种原因,每当文本或字体的任何相关属性发生更改时,字体都会重置

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

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

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);
}
这与报告的“bug”有关