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

问题描述:

我有一个用户名标签,需要将其视为大写字母,但这应该只与UI有关。数据(字符串)应作为实际情况保存在数据库中,不管它是什么。任何人都可以告诉我,如果无论如何将其转换为大写而不通过后面的代码进行操作?在Xamarin.Forms中使用xaml显示标签文本大写

当你意识到你可以从后面的代码做这样:

string data = "my data"; 
UILabel myLabel = new UILabel(); 
myLabel.Text = data.ToUpper(); 

所以记住,你不想做这种方式的轴承则需要从的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(); }  
    } 
} 

编辑:由于每下面的评论,这里是Xamarin.Forms

的替代解决方案这使用一个值转换器作为粘合溶液的一部分。

public class StringCaseConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 

      string param = System.Convert.ToString(parameter) ?? "u"; 

      switch (param.ToUpper()) 
      { 
       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}}" 
+0

我不想标签文本转换为上,只需要显示大写。有没有什么办法只是将它显示为较高,但不能在后面的代码中转换 – Riyas

+0

@Riyas您只将字符串转换为较高的字符串,无需在其他任何位置重复使用该字符串,无论哪种方式我都更新了答案上面的标签的text属性的上面,而不是在你分配的字符串上使用ToUpper()。 – Digitalsa1nt

+0

如何将它绑定到内容视图xaml中的标签? – Riyas