ABAZE DevS Blog

La Développement une vie une Passion

Archive for the 'WPF' Category

Window Presentation Foundation

[WPF] Regles validation

Posted by abaze17 on 19th juin 2012

Dans ce blog, il est question de vous parlez d’une propriété assez puissante de WPF,

La documentation de Microsoft qui montre comment afficher les erreurs de validation pour les éléments indique d’utiliser une liaison comme ceci:

Suite à mes travaux,

J’utilise la fenêtre de sortie tout le temps pour les fins de débogage, donc l’avoir remplir avec ces messages d’erreur brise mon flux de travail. J’ai décidé de trouver une meilleure façon d’afficher les messages d’erreur, de sorte que la fenêtre de sortie n’est pas obstruée . Voici ce que je suis venu avec:

en exécutant la démo , on , c’est vrai le libelle est anglais, mais sa ne devrait pas vous gêner

Autre implémentation : implémenter la validation de la liaison

Comment : implémenter la validation de la liaison

Cet exemple montre comment utiliser un ErrorTemplate et un déclencheur de style pour fournir la rétroaction visuelle pour signaler à l’utilisateur l’entrée d’une valeur non valide en fonction d’une règle de validation personnalisée.

Exemple

Le contenu de texte de la TextBox dans l’exemple suivant est lié à la propriété Age (de type int) d’un objet de source de liaison nommé ods. La liaison est définie pour utiliser la règle de validation AgeRangeRule pour que, lorsque l’utilisateur entre des caractères non numériques ou une valeur inférieure à 21 ou supérieure à 130, un point d’exclamation rouge apparaisse à côté de la zone de texte et une info-bulle avec le message d’erreur s’affiche lorsque l’utilisateur place le pointeur de la souris sur la zone de texte.

XAML

<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>
        <c:AgeRangeRule Min="21" Max="130"/>
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>

L’exemple suivant montre l’implémentation AgeRangeRule qui hérite de ValidationRule et remplace la méthode Validate. La méthode Int32.Parse () est appelée sur la valeur pour vérifier qu’elle ne contient pas de caractères non valides. La méthode Validate retourne unValidationResult qui indique si la valeur est valide en fonction de l’interception d’une exception pendant l’analyse et si la valeur d’âge ne se trouve pas entre la limite inférieure et la limite supérieure.

C#

public class AgeRangeRule : ValidationRule
{
    private int _min;
    private int _max;
 
    public AgeRangeRule()
    {
    }
 
    public int Min
    {
        get { return _min; }
        set { _min = value; }
    }
 
    public int Max
    {
        get { return _max; }
        set { _max = value; }
    }
 
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        int age = 0;
 
        try
        {
            if (((string)value).Length > 0)
                age = Int32.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 + ".");
        }
        else
        {
            return new ValidationResult(true, null);
        }
    }
}

L’exemple suivant montre le ControlTemplate validationTemplate personnalisé qui crée un point d’exclamation rouge pour signaler à l’utilisateur une erreur de validation. Les modèles de contrôle sont utilisés pour redéfinir l’apparence d’un contrôle.

 

XAML

 <ControlTemplate x:Key="validationTemplate">
  <DockPanel>
    <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
    <AdornedElementPlaceholder/>
  </DockPanel>
</ControlTemplate>
Comme indiqué dans l'exemple suivant, l'ToolTipp qui affiche le message d'erreur est créée à l'aide du style textBoxInError. Si la valeur deHasErrorr est true, le déclencheur affecte à l’info-bulle de la TextBox actuelle sa première erreur de validation. La RelativeSource a la valeur Selffen faisant référence à l’élément actuel.

XAML

<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>

 

 




Posted in WPF | No Comments »

 


Créer un Blog | Nouveaux blogs | Top Tags | 14 articles | blog Gratuit | Abus?