我有WPF c# TextBox,它必须限制在最多20个字符的英文,和10个字符的简体中文,或其他类似的字符集。我将MaxLength属性设置为20个字符,它在使用英文键盘时可以正常工作,但如果我选择中文键盘,它允许我输入20个简体字符。我们的数据库字段被限制为20个字节。谢谢你的帮助。
发布于 2014-01-30 04:34:58
MaxLength计算的是字符数,而不是表示字符数所需的字节数。事实上,字符串的字节表示取决于所使用的字符编码。.NET原生使用UTF-16,所有字符(英文和中文)占用2个字节。我假设您的数据库使用UTF-8,其中英文字符占用1个字节,中文字符占用2个字节。
您将需要动态地强制执行您的限制。您可以通过实现ValidationRule来实现,如下图所示。有关如何在TextBox中使用它的说明,请阅读Data validation in WPF。
public class Byte20ValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
int byteCount = Encoding.UTF8.GetByteCount(value.ToString());
if (byteCount <= 20)
return new ValidationResult(true, null);
return new ValidationResult(false, "Too many bytes.");
}
}https://stackoverflow.com/questions/21441889
复制相似问题