为WPF编写特殊的掩码TextBox

时间:2012-10-15 19:35:16

标签: wpf custom-controls

我想在WPF中开发一个具有某种掩码的自定义用户控件。此功能非常类似于许多在线应用程序中提供的功能,您可以在其中输入您的信用卡号码,下次每当您登录到您的帐户时,您只会看到最后一张卡号的数字(例如 ** * 4587)但是当我以这种方式显示数据时,我希望保持实际值不变,因此在内部绑定中我将访问完整数据。

3 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

string originalNumber = textBoxOriginalNumber.Text;
int numberOfDigits = textBoxOriginalNumber.Text.Length;
string hidden = new String('*', numberOfDigits-4);
textBoxModifiedNumber.Text = hidden + originalNumber.Remove(0, numberOfDigits-4);

这不是一个优雅的解决方案,但如果有人给你更好的解决方案,它会帮助你。基本上,它需要原始信用卡号,计算它有多少位数,删除“n-4”的第一个数字,然后显示*符号“n-4”次加上最后四位数。无论原始数字有多少位数,这都可以。

此外,我不确定掩码(或其他用户建议的正则表达式)是否会起作用,因为(如果我理解的话)它将替换整数,而不是显示最后4位数。 / p>

答案 1 :(得分:1)

您可以使用Regex.Replace和\ d来表示数字

var digits = new Regex(@"\d");
modifiedNumber = digits.Replace(originalNumber, "*");

或者,如果您想更新除最后一组

之外的整组数字
@"\d{4}-"

答案 2 :(得分:1)

好的,这就是我解决这个问题的方法。使用卡号后,我想使用ID和SN号,所以我所做的只是写了一个小方法,它接受字符串并返回屏蔽值,以防万一有人需要这个功能。

    public static string GetMaskedNumber(string unsecuredNumber, char maskChar)
    {
        return unsecuredNumber.Substring(unsecuredNumber.Length - 4)
                     .PadLeft(unsecuredNumber.Length - 6, ' ')
                     .PadLeft(unsecuredNumber.Length, maskChar);
    }