wpf验证规则:使用点而不是逗号验证整数

wpf validation rule: validate integer with dot instead of comma

我正在开发一个c#wpf应用程序,我想在文本框中验证用户输入。 我有这样的验证规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class NumericRule : ValidationRule
{
    /// <summary>
    /// Checks whether a value can be converted to a numeric value.
    /// </summary>
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        string input = value as string;

        //try conversion
        int result;
        var status = int.TryParse(input, NumberStyles.Any,
                                  CultureInfo.InvariantCulture, out result);

        //return valid result if conversion succeeded
        return status ? ValidationResult.ValidResult
                      : new ValidationResult(false, input +" is not a number");
    }
}

但是,输入带有小数的数字(如3.5)时,表示该数字无效。 输入3,5即可。 我希望这两个数字都有效,如果输入带逗号的值,则将其转换为点。 另外我想在点后最多有3位小数。

有帮助吗?

谢谢


我想你要解析为double。 如果你想要","和"。" 作为分隔符,您可以查看多种文化。 将您需要支持的文化添加到列表中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class NumericRule : ValidationRule
{
    private readonly List<CultureInfo> cultures = new List<CultureInfo> {
        CultureInfo.CurrentCulture,
        CultureInfo.CurrentUICulture,
        CultureInfo.InvariantCulture
    };

    public override ValidationResult Validate (object value, CultureInfo cultureInfo)
    {
        string input = (string)value;

        bool success = false;
        foreach (CultureInfo culture in cultures) {
            double result;
            if (double.TryParse(input, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint, culture, out result)) {
                int decimalPos = input.IndexOf(culture.NumberFormat.NumberDecimalSeparator);
                if (decimalPos == -1) {
                    success = true;
                    break;
                }
                if (input.Substring(decimalPos + 1).Length > 3)
                    return new ValidationResult(false,"Too many digits in" + input);
                success = true;
                break;
            }
        }
        return success ? ValidationResult.ValidResult : new ValidationResult(false, input +" is not a number");
    }
}