我有一个用户名标签,需要将其显示为大写字母,但这仅适用于用户界面。无论输入的数据(字符串)是什么,都应该按照实际大小写保存在数据库中。请问是否有任何方法可以在不通过代码后台进行转换的情况下将其转换为大写字母?
我有一个用户名标签,需要将其显示为大写字母,但这仅适用于用户界面。无论输入的数据(字符串)是什么,都应该按照实际大小写保存在数据库中。请问是否有任何方法可以在不通过代码后台进行转换的情况下将其转换为大写字母?
您可以使用 Label.TextTransform
与 TextTransform.Uppercase
。
XAML
<Label TextTransform="Uppercase" />
C#
var label = new Label
{
TextTransform = TextTransform.Uppercase
};
正如你所知,你可以在代码后台这样做:
string data = "my data";
UILabel myLabel = new UILabel();
myLabel.Text = data.ToUpper();
考虑到你不想这样做,你需要从UILabel派生出自己的类,并在Text属性的get;set;值的末尾简单地添加ToUpper()。
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(); }
}
}
编辑:根据下面的评论,这是适用于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();
}
}
它将在XAML中使用如下:
Text="{Binding Text, Converter={StaticResource caseConverter}, ConverterParameter=u}}"
或者您可以使用可绑定属性,然后在getter上格式化文本: 例如:
public static readonly BindableProperty ItemLabelProperty =
BindableProperty.Create(nameof(ItemLabel), typeof(string),
typeof(DetailsLineItemControl), default(string), BindingMode.OneWay);
public string ItemLabel
{
get
{
var value = (string)GetValue(ItemLabelProperty);
return !string.IsNullOrEmpty(value) ? value.ToUpper() : value;
}
set
{
SetValue(ItemLabelProperty, value);
}
}
switch (param.ToUpper()[0]) { case 'U': return ((string)value).ToUpper(); case 'L': return ((string)value).ToLower(); default: return ((string)value); }
- Clint StLaurent