有没有人找到解决 TextBox 字段问题的方法,它的定义如下所示:
<TextBox MaxLength="10" AcceptsReturn="True"/>
在上述情况下,用户不能输入超过 10 个字符,只要他不使用“Enter”,它就可以工作。一旦他使用 enter 来刹车线,那么 TextBox 将让他每行再输入 +2 个字符。所以看起来负责尊重“MaxLength”属性的方法忽略了“CR LF”:(任何关于如何克服这个问题的建议都非常受欢迎。
有没有人找到解决 TextBox 字段问题的方法,它的定义如下所示:
<TextBox MaxLength="10" AcceptsReturn="True"/>
在上述情况下,用户不能输入超过 10 个字符,只要他不使用“Enter”,它就可以工作。一旦他使用 enter 来刹车线,那么 TextBox 将让他每行再输入 +2 个字符。所以看起来负责尊重“MaxLength”属性的方法忽略了“CR LF”:(任何关于如何克服这个问题的建议都非常受欢迎。
找到了解决该问题的方法。它并不完美,但可以完成工作。
我使用的是一个转换器,它使用用户输入从文本中删除“\r”字符:
public class RemoveLineFeedCharConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return value; //do not convert in that direction
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
var text = (string) value;
return text.Replace("\r", ""); //remove line feed character
}
}
如前所述,这并不完美,但至少使输入的文本比 MaxLength 短。
希望这会对某人有所帮助
关于MG
我在没有转换器的情况下做到了这一点。如果您使用双向绑定,如下所示:
<TextBox Text="{Binding TextBoxText, Mode=TwoWay}" MaxLength="10" AcceptsReturns="True"/>
然后你可以将类似的想法应用于绑定属性的 set 函数:
private string _textboxtext;
public string TextBoxText
{
get{return _textboxtext;}
set
{
_textboxtext=value.Replace("\r","");
OnPropertyChanged();
}
}