如果AcceptsReturn=True,则不尊重TextBox中的MaxLength

本文关键字:TextBox 中的 MaxLength AcceptsReturn True 如果 | 更新日期: 2023-09-27 18:10:33

有没有人找到解决问题的TextBox字段,它的定义看起来像这样:

<TextBox MaxLength="10" AcceptsReturn="True"/>

在上述情况下,用户不应该能够输入超过10个字符,只要他不使用"enter",它就可以工作。一旦他使用回车键来刹车,那么TextBox将让他每行多输入2个字符。因此,看起来负责尊重"MaxLength"属性的方法忽略了"CR LF":对于如何解决这个问题,欢迎提出任何建议。

如果AcceptsReturn=True,则不尊重TextBox中的MaxLength

找到了解决这个问题的方法。它不是完美的,但它完成了工作。

我使用的是一个转换器,从文本中删除"'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();
    }
}