如何限制此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();
}
}
谢谢, 尼科
答案 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>