C#,UWP(TextBlock,Binding)

时间:2016-07-20 05:24:37

标签: c# uwp

如何限制此TextBlock中的字符数?
例如:它最多只能显示5个字符。

<TextBlock >
    <Run Text="Tender Amount:"/>
    <Run Text="{Binding TenderAmount, 
                Converter={StaticResource StringFormatConverter}, 
                ConverterParameter='{}{0:C}'}" />
</TextBlock>

btw继承我的转换器中的代码

public sealed class StringFormatConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null)
            return null;

        if (parameter == null)
            return value;

        return string.Format((string)parameter, value);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        string language)
    {
        throw new NotImplementedException();
    }
}

谢谢, 尼科

2 个答案:

答案 0 :(得分:2)

您可以编写自己的绑定转换器来限制显示的字符数。

例如,这个例子只会将显示的字符数限制为字符串中的前5个字符(或者传入字符串的字符串表示形式)。

public class StringLengthLimitConverter : IValueConverter
{
    public object Convert(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        string val = value.ToString();
        int length = parameter as int? ?? 5;
        if (val.Length > length)
            return val.Substring(0, length);
        return val;
    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
}

用法:

<Run Text="{Binding Path=TenderAmount, 
               Converter={StaticResource StringLengthLimitConverter},
               ConverterParameter=5}" />

根据您实际想要做的事情,您可能希望在最后添加省略号()。

答案 1 :(得分:0)

您必须编写自己的转换器,如:

public class StringMaxLengthConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        int MaxLength = Convert.ToInt32(parameter);
        string TheString = (string)Value;

        if (MaxLength > TheString.Length)
        {
            return TheString.SubString(0, MaxLength);
        }
        else
        {
            return TheString;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

在您的资源中声明它:

<local:StringMaxLengthConverter x:Key="StrMaxLengthCvtr"/>

在TextBlock中使用它并传递最大字符串长度,如:

<TextBlock >
  <Run Text="Tender Amount:"/>
  <Run Text="{Binding TenderAmount, Converter={StaticResource StrMaxLengthCvtr}, ConverterParameter=5}" />
</TextBlock>