IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Validation Affichage Message


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Points : 71
    Points
    71
    Par défaut Validation Affichage Message
    Bonjour,

    J'ai un textbox dans lequel je vérifie que l'utilisateur entre bien une date dans le futur:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                    <TextBox Name="StartDateDTKey" Grid.Row="2" Grid.Column="1" 
                      Validation.ErrorTemplate="{StaticResource validationTemplate}" 
                        Style="{StaticResource textStyleTextBox}" Margin="8,5,0,5">
                        <TextBox.Text>
                            <Binding Path="StartDate" UpdateSourceTrigger="PropertyChanged" 
                                Converter="{StaticResource dateConverter}" >
                                <Binding.ValidationRules>
                                    <src:FutureDateRule />
                                </Binding.ValidationRules>
                            </Binding>
                        </TextBox.Text>
                    </TextBox>

    Si la date n'est pas correcte alors, un ! se met à gauche du text box et le tooltip indique le message d'erreur

    Ds les ressources, j'ai pour le "!"
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <ControlTemplate x:Key="validationTemplate">
                <DockPanel>
                    <TextBlock Foreground="Red" FontSize="20" Text="!"></TextBlock>
                    <AdornedElementPlaceholder/>
                </DockPanel>
            </ControlTemplate>

    et pour le tooltip
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <Style x:Key="textStyleTextBox" TargetType="TextBox">
            <Setter Property="Foreground" Value="#333333" />
            <Setter Property="MaxLength" Value="40" />
            <Setter Property="Width" Value="392" />
            <Style.Triggers>
              <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip"
                  Value="{Binding RelativeSource={RelativeSource Self},
                                  Path=(Validation.Errors)[0].ErrorContent}"/>
              </Trigger>
            </Style.Triggers>
          </Style>

    Ca marche nickel mais je voudrais :

    Au lieu de mettre un !, mettre le message du tooltip (l'erreur). Si possible en dessous du textbox.

    Ou alors je crée un label en dessous du textbox et je le rempli avec le message du tooltip

    Mais ca ne fonctionne pas :

    Si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"
    a la place du !, le message ne vient pas.

    J'ai créé un label "msgerr" et dans le trigger, j'ajoute un setter
    Mais dans ce setter, je ne peux pas utiliser le target name pour accéder à mon label.

    Comment faire ?

    Merci d'avance

    Gridin

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    "{RelativeSource Self}" fait référence à l'élément courant, donc en l'occurrence le TextBlock d'erreur, et non le TextBox de saisie...

    A priori ça devrait marcher si tu fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Validation.Errors)[0].ErrorContent}"
    "{RelativeSource TemplatedParent}" fait référence au contrôle auquel le template s'applique

  3. #3
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Points : 71
    Points
    71
    Par défaut
    Hélas, le message n'apparait pas

  4. #4
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Points : 71
    Points
    71
    Par défaut
    Est-ce que dans

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <Style TargetType="{x:Type TextBox}">
         <Style.Triggers>
              <Trigger Property="Validation.HasError" Value="true">
                   <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
                   <Setter Property="Background" Value="Red"/>
              </Trigger>
         </Style.Triggers>
    </Style>

    on ne peut pas via un setter mettre du texte dans un autre label ou textblock ?

    Déjà, pourquoi le target name n'est pas autorisé ?

    Merci

  5. #5
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Points : 71
    Points
    71
    Par défaut
    Autre idée mais je vois pas comment faire.

    Mettre un label ou un textblock et le binder sur la valeur du tooltip

  6. #6
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Points : 71
    Points
    71
    Par défaut
    J'y suis avec la solution label Binder

    C'est plus lourd que si je passe par le ControlTemplate x:Key="validationTemplate" mais ca fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Label x:Name="A" Grid.Row="1" Width="100" Background="Aqua" Content="{Binding ElementName=txtProductName, Path=ToolTip}"/>
    Merci

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    OK, en fait j'ai testé, et j'ai un peu mieux compris... en fait le DataContext des contrôles dans le ErrorTemplate, c'est la collection d'erreurs (Validation.Errors)

    Donc pour binder sur la première erreur, il faut faire "{Binding [0].ErrorContent}", tout simplement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Validation] Affichage message d'erreur
    Par Angy987 dans le forum Struts 2
    Réponses: 5
    Dernier message: 13/10/2010, 15h23
  2. affichage message de validation
    Par sarrajbs dans le forum Struts 1
    Réponses: 4
    Dernier message: 28/07/2010, 22h45
  3. [validation] pb affichage message
    Par ericw78 dans le forum Struts 2
    Réponses: 2
    Dernier message: 02/01/2008, 11h38
  4. [validator] affichage des messages
    Par phoebe dans le forum Struts 1
    Réponses: 2
    Dernier message: 10/08/2007, 17h25
  5. [castor][SOAP] Probleme avec la validation du message SOAP
    Par VinceFromBcn dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/09/2005, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo