我正在使用Telerik的RadMaskedTextBox,并且尝试创建一个 mask ,使其遵循加拿大邮政编码模板。
模板如下所示字母编号字母编号字母编号
邮政编码示例T4R1U8
目前,我的 mask 是Mask="L#L #L#"
,但这允许同时使用大写和小写字母。我正在尝试使用它,以便可以输入大写字母并可以输入小写字母,但是小写字母会立即变为大写。
我已经尝试了两个解决方案,它们非常接近,但还不是最终解决方案。
第一个是在 View 模型方面解决这个问题
public string PostalCode
{
get {return postalCode;}
set
{
postalCode = value;
postalCode = postalCode.ToUpper();
OnPropertyChanged("PostalCode");
}
}
通过这种方法,值将更改为较高,但是键入索引将移动到MaskTextBox的前面,而不是始终保留在键入字符之后。
我采用的第二种方法效果很好,但是不允许我输入小写字符。我最终使用了CustomToken。 “*”是我的自定义 token 字符,因此我的新掩码是
Mask="*#* #*#"
public class CustomToken : ITokenValidationRule
{
#region ITokenValidationRule Members
public bool IsRequired
{
get { return false; }
}
public bool IsValid(char ch)
{
return ValidChars.Contains(ch);
}
public char Token
{
get { return '*'; }
}
public TokenTypes Type
{
get { return TokenTypes.AlphaNumeric; }
}
private string myValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public string ValidChars
{
get { return myValidChars; }
}
#endregion
}
任何提示将非常感谢。
最佳答案
这个here也有类似的问题。
解决方案是使用SelectionStart在最后设置插入符,例如:
Dispatcher.BeginInvoke(() =>
{
if (txtPOCode.MaskedText != null)
{
txtPOCode.MaskedText = txtPOCode.MaskedText.ToUpper();
txtPOCode.SelectionStart = txtPOCode.MaskedText.Length;
txtPOCode.Focus();
}
});
关于c# - MaskedTextBox强制使用大写字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43280340/