How can I set a regular expression on WPF TextBox? I want the textbox to accept input in some predefined format. Is it possible?
A:
Either you can check at the changed event or you could use what's called a masked textbox.
Daniel A. White
2009-11-14 15:21:20
i am not able to see masked textbox in wpf
viky
2009-11-14 15:24:42
See http://stackoverflow.com/questions/481059/where-can-i-find-a-free-masked-textbox-in-wpf
Jan Jongboom
2009-11-14 16:02:41
+1
A:
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);
}
}
Ray Burns
2009-11-14 17:34:17