在Xamarin.Forms中使用xaml以大写形式显示标签文本

Riy*_*yas 3 c# xaml label xamarin.ios xamarin.forms

我有一个用户名标签,需要将其视为大写,但这仅与UI有关。数据(字符串)应按实际情况保存在数据库中,无论它是什么。有人可以告诉我是否有将其转换为大写的方式,而无需通过后面的代码进行吗?

小智 18

您可以Label.TextTransformTextTransform.Uppercase.

XAML

<Label TextTransform="Uppercase" />
Run Code Online (Sandbox Code Playgroud)

C#

var label = new Label
{
    TextTransform = TextTransform.Uppercase
};
Run Code Online (Sandbox Code Playgroud)


Dig*_*1nt 6

如您所知,您可以从后面的代码中执行以下操作:

string data = "my data";
UILabel myLabel = new UILabel();
myLabel.Text = data.ToUpper();
Run Code Online (Sandbox Code Playgroud)

因此请记住,您不想这样做,您需要从UILabel派生并创建自己的方法,然后只需将ToUpper()添加到get; set;的末尾即可。Text属性的值。

using CoreGraphics;
using System;
using UIKit;

namespace MyApp.Controls
{
    partial class Control_UpperLabel : UILabel
    {
        public Control_UpperLabel IntPtr handle) : base(handle)
        {
               //
        }

        public Control_UpperLabel()
        {
               //
        }

        public override void Draw(CGRect rect)
        {
            base.Draw(rect);
        }

        public override string Text { get => base.Text.ToUpper(); set => base.Text = value.ToUpper(); }    
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑:根据下面的评论,这是Xamarin.Forms的替代解决方案

这将值转换器用作绑定解决方案的一部分。在下面的评论中使用clint的建议也进行了稍微修改。谢谢。

public class StringCaseConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        switch ((parameter as string).ToUpper()[0]) 
        { 
        case 'U': 
            return ((string)value).ToUpper(); 
        case 'L': 
            return ((string)value).ToLower(); 
        default: 
            return ((string)value);
        };
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

它将在XAML中这样使用:

Text="{Binding Text, Converter={StaticResource caseConverter}, ConverterParameter=u}}"
Run Code Online (Sandbox Code Playgroud)