You have several options:
- You can create a
ValidationRule
subclass (see below) and add it to your Binding's Validators property
- You can set a
ValidationCallback
on your bound property, throw an exception if the value is wrong, and use this technique for easily showing validation errors
- You can create an attached property that registers an event handler for the TextBox.TextChanged property and implement your own validation error notification mechanism
- You can use a normal TextBox with an TextBox_Changed handler in code behind
- You can handle PreviewKeyDown and PreviewTextInput from an attached property as shown here
- You can use a masked text box as mentioned by Jan
For arbitrary regexes I would generally use WPF's built-in validation features or do the validation on the bound property. For specific needs the PreviewKeyDown/PreviewTextInput or masked text box might be better.
Here is how you would create a ValidationRule subclass:
public class RegexValidationRule : ValidationRule
{
... // Declare Regex property and Message property
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if(Regex.IsMatch((string)value))
return ValidationResult.ValidResult;
else
return new ValidationResult(false, Message);
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…