How can I set a regular expression on WPF TextBox? I want the textbox to accept input in some predefined format. Is it possible?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
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);
}
}
回答2:
Either you can check at the changed event or you could use what's called a masked textbox.