Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet exemple montre comment utiliser un ErrorTemplate et un déclencheur de style pour fournir des commentaires visuels afin d’informer l’utilisateur lorsqu’une valeur non valide est entrée, en fonction d’une règle de validation personnalisée.
Exemple :
Le contenu texte de l’exemple TextBox suivant est lié à la Age
propriété (de type int) d’un objet source de liaison nommé ods
. La liaison est configurée pour utiliser une règle de validation nommée AgeRangeRule
afin que si l’utilisateur entre des caractères non numériques ou une valeur inférieure à 21 ou supérieure à 130, une marque d’exclamation rouge apparaît en regard de la zone de texte et qu’un info-bulle avec le message d’erreur s’affiche lorsque l’utilisateur déplace la souris sur la zone de texte.
<TextBox Name="textBox1" Width="50" FontSize="15"
Validation.ErrorTemplate="{StaticResource validationTemplate}"
Style="{StaticResource textBoxInError}"
Grid.Row="1" Grid.Column="1" Margin="2">
<TextBox.Text>
<Binding Path="Age" Source="{StaticResource ods}"
UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<local:AgeRangeRule Min="21" Max="130"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
L’exemple suivant montre l’implémentation de AgeRangeRule
, qui hérite de ValidationRule et remplace la méthode Validate. La Int32.Parse
méthode est appelée sur la valeur pour s’assurer qu’elle ne contient pas de caractères non valides. La Validate méthode retourne une ValidationResult valeur qui indique si la valeur est valide en fonction de si une exception est interceptée pendant l’analyse et si la valeur d’âge est en dehors des limites inférieures et supérieures.
public class AgeRangeRule : ValidationRule
{
public int Min { get; set; }
public int Max { get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
int age = 0;
try
{
if (((string)value).Length > 0)
age = int.Parse((String)value);
}
catch (Exception e)
{
return new ValidationResult(false, $"Illegal characters or {e.Message}");
}
if ((age < Min) || (age > Max))
{
return new ValidationResult(false,
$"Please enter an age in the range: {Min}-{Max}.");
}
return ValidationResult.ValidResult;
}
}
Public Class AgeRangeRule
Inherits ValidationRule
' Properties
Public Property Max As Integer
Public Property Min As Integer
' Methods
Public Overrides Function Validate(value As Object, cultureInfo As CultureInfo) As ValidationResult
Dim num1 As Integer = 0
Try
If (CStr(value).Length > 0) Then
num1 = Integer.Parse(CStr(value))
End If
Catch exception1 As Exception
Return New ValidationResult(False, $"Illegal characters or {exception1.Message}")
End Try
If ((num1 < Min) OrElse (num1 > Max)) Then
Return New ValidationResult(False, $"Please enter an age in the range: {Min}-{Max}.")
End If
Return ValidationResult.ValidResult
End Function
End Class
L’exemple suivant montre la personnalisée ControlTemplatevalidationTemplate
qui crée un point d’exclamation rouge pour avertir l’utilisateur d’une erreur de validation. Les modèles de contrôle sont utilisés pour redéfinir l’apparence d’un contrôle.
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
Comme illustré dans l'exemple suivant, le ToolTip qui montre le message d'erreur est créé en utilisant le style nommé textBoxInError
. Si la valeur de HasError est true
, le déclencheur définit l’info-bulle de l'élément actuel TextBox sur sa première erreur de validation. Le RelativeSource est défini sur Self, en se référant à cet élément.
<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
Objet de données
L’extrait de code suivant est l’objet de données utilisé dans les exemples de code précédents. Une instance est créée dans le code XAML en tant que ressource statique avec la clé de ods
:
public class MyDataSource
{
public MyDataSource()
{
Age = 0;
Age2 = 0;
}
public int Age { get; set; }
public int Age2 { get; set; }
public int Age3 { get; set; }
}
Public Class MyDataSource
Public Sub New()
Me.Age = 0
Me.Age2 = 0
End Sub
Public Property Age As Integer
Public Property Age2 As Integer
Public Property Age3 As Integer
End Class
Exemple complet
Pour obtenir l’exemple complet, consultez l’exemple de validation d'attache.
Notez que si vous ne fournissez pas de modèle d’erreur personnalisé, ErrorTemplate le modèle d’erreur par défaut apparaît pour fournir des commentaires visuels à l’utilisateur en cas d’erreur de validation. Consultez « Validation des données » dans Vue d’ensemble de la liaison de données pour plus d’informations. WPF fournit également une règle de validation intégrée qui capture les exceptions levées pendant la mise à jour de la propriété source de liaison. Pour plus d’informations, consultez ExceptionValidationRule.
Voir aussi
- Vue d’ensemble de la liaison de données
- Sujets de type "comment faire"
.NET Desktop feedback