L'une des façons de réaliser des validations d'entrées utilisateurs en WPF est l'implémentation de « Validation Rules ». Il suffit hériter de la classe « System.Windows.Control.ValidationRules » :
internal class RegexValidationRule: ValidationRule
{
private string _pattern;
public override ValidationResult Validate( object value,
System.Globalization.CultureInfo cultureInfo)
{
string strValue = value as string;
if (strValue == null)
{
return new ValidationResult(false, null);
}
try
{
Regex regex = new Regex(_pattern);
bool match = regex.IsMatch(strValue);
return new ValidationResult(match, false);
}
catch
{
return new ValidationResult(false, null);
}
}
public string Pattern
{
get
{
return _pattern;
}
set
{
_pattern = value;
}
}
}
La propriété Pattern est remplie lors de la déclaration de notre règle de validation directement en xaml :
<TextBox Height="21" Margin="106,0,145.25,94" Name="tbEmail" VerticalAlignment="Bottom"
Canvas.Left="59" Canvas.Top="96" Width="226">
<TextBox.Text>
<Binding Path="Email">
<Binding.ValidationRules>
<validators:RegexValidationRule Pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
<Validation.ErrorTemplate>
<ControlTemplate>
<Border BorderBrush="Red" BorderThickness="3">
<AdornedElementPlaceholder />
</Border>
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>