有没有办法可以覆盖XF中标签的text属性?

时间:2020-06-21 09:08:24

标签: xamarin xamarin.forms

这里有我的代码:

public partial class UpperLabel : Label
{
    public UpperLabel()
    {
        this.SetDynamicResource(Label.FontFamilyProperty, "Roboto-Regular");
        this.SetDynamicResource(Label.FontSizeProperty, "HeaderTextFontSize");
        this.SetDynamicResource(Label.TextColorProperty, "HeaderTextColor");
    }
}

我遇到的问题是我想这样做,以便标签始终以大写形式显示文本。这是我想做的,但是我相信鉴于我拥有的代码,这是不可能的。

    public static readonly BindableProperty TextProperty =
        BindableProperty.Create(nameof(Text), typeof(string), typeof(Label), default(string));


    public string Text {
        get
        {
            var value = (string)GetValue(TextProperty);
            return !string.IsNullOrEmpty(value) ? value.ToUpper() : value;
        }
        set
        {
            SetValue(TextProperty, value);
        }
    }

请注意,我意识到一个建议是创建一个名为Text1的属性,然后将其更改为upper并设置Text。此外,还有其他解决方案,例如在带有Text属性的网格中包含Label。但是我仍然想知道是否可以做任何事情使标签变成大写。

1 个答案:

答案 0 :(得分:1)

您可以这样做。

    new public static readonly BindableProperty TextProperty =
    BindableProperty.Create(nameof(Text), typeof(string), typeof(CustomLabel), default(string),propertyChanged: TextPropertyChanged);

    private static void TextPropertyChanged(BindableObject bindable, object oldValue, object newValue)
    {
        var label = (CustomLabel)bindable;
        label.Text = newValue.ToString().ToUpper();
    }