我有WPF c#TextBox,必须限制为最多20个英文字符,10个简体中文字符或其他类似字符集。我将MaxLength属性设置为20个字符,并且在使用英文键盘时工作正常,但如果我选择中文键盘,则允许我输入20个简化字符。我们的数据库字段限制为20个字节。 谢谢你的帮助。
答案 0 :(得分:4)
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.");
}
}
。
{{1}}