c# – WPF简单验证问题 – 设置自定义的ErrorContent

前端之家收集整理的这篇文章主要介绍了c# – WPF简单验证问题 – 设置自定义的ErrorContent前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有以下TextBox
<TextBox Height="30" Width="300" Margin="10" Text="{Binding IntProperty,NotifyOnValidationError=True}" Validation.Error="ContentPresenter_Error">
</TextBox>

而这在codebehind:

private void ContentPresenter_Error(object sender,ValidationErrorEventArgs e) {
   MessageBox.Show(e.Error.ErrorContent.ToString());
}

如果在文本框中输入字母“x”,弹出的消息是

value ‘x’ could not be converted

有没有办法自定义这个消息?

解决方法

我不喜欢回答我自己的问题,但是看起来唯一的办法是实现一个ValidationRule,就像下面的(可能有一些bug):
public class BasicIntegerValidator : ValidationRule {       

    public string PropertyNameToDisplay { get; set; }
    public bool Nullable { get; set; }
    public bool AllowNegative { get; set; }

    string PropertyNameHelper { get { return PropertyNameToDisplay == null ? string.Empty : " for " + PropertyNameToDisplay; } }

    public override ValidationResult Validate(object value,System.Globalization.CultureInfo cultureInfo) {
        string textEntered = (string)value;
        int intOutput;
        double junkd;

        if (String.IsNullOrEmpty(textEntered))
            return Nullable ? new ValidationResult(true,null) : new ValidationResult(false,getMsgDisplay("Please enter a value"));

        if (!Int32.TryParse(textEntered,out intOutput))
            if (Double.TryParse(textEntered,out junkd))
                return new ValidationResult(false,getMsgDisplay("Please enter a whole number (no decimals)"));
            else
                return new ValidationResult(false,getMsgDisplay("Please enter a whole number"));
        else if (intOutput < 0 && !AllowNegative)
            return new ValidationResult(false,getNegativeNumberError());

        return new ValidationResult(true,null);
    }

    private string getNegativeNumberError() {
        return PropertyNameToDisplay == null ? "This property must be a positive,whole number" : PropertyNameToDisplay + " must be a positive,whole number";
    }

    private string getMsgDisplay(string messageBase) {
        return String.Format("{0}{1}",messageBase,PropertyNameHelper);
    }
}
原文链接:https://www.f2er.com/csharp/95137.html

猜你在找的C#相关文章