WPF简单validation问题 – 设置自定义ErrorContent

如果我有以下TextBox:

  

这在代码隐藏中:

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

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

值’x’无法转换

有没有办法自定义此消息?

我不喜欢回答我自己的问题,但似乎唯一的方法是实现一个ValidationRule,就像下面的内容一样(可能存在一些错误):

 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); } } 

您可以使用ValidationRules。

例如,在我的情况下,当用户在十进制datagridtextcolumn中输入无效值时,而不是默认消息“无法转换值”,我可以用以下方式覆盖它:

          

这是DecimalRule的代码:

 public override ValidationResult Validate(object value, CultureInfo cultureInfo) { decimal convertedDecimal; if (!decimal.TryParse((string)value, out convertedDecimal)) { return new ValidationResult(false, "My Custom Message")); } else { return new ValidationResult(true, null); } }