我正在使用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/

10-12 00:36