WPF Erreurs de Validation: Réglage de l'info-bulle avec le Message d'Erreur
Pourquoi il n'y a pas de texte d'info-bulle sur les erreurs?
<Style TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<Border ...>
<AdornedElementPlaceholder ...
ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Border>
...
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
J'ai aussi remarqué que
<AdornedElementPlaceholder ...
ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
échoue, mais le ci-dessous réussit, même avec la même liaison, pourquoi est-ce donc? Ne pas AdornedElementPlaceholder
reportez-vous à la zone de texte? Même si ce n'est pas, ne devrait-il pas une info-bulle apparaît quelque part?
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
OriginalL'auteur Jiew Meng | 2010-11-12
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas placer une info-bulle sur le AdornedElementPlaceholder, je ne pense pas que c'est visible à tous, c'est juste de la réservation d'espace pour celui qui l'utilise (dans votre cas, une zone de texte). En regardant l'Arbre Visuel avec Snoop, nous pouvons voir que la TemplatedAdorner se retrouve dans un endroit différent dans la VisualTree que la zone de texte donc il y aura maintenant une manière pour nous de trouver la zone de texte à partir de la VisualTree. On peut le trouver par le biais de AdornedElement, mais nous avons encore de ne pas être en mesure de définir une info-bulle.
La seule chose visible ici dans le TemplatedAdorner est la Frontière. La Frontière sait que son Enfant - le TemplatedAdorner - qui sait son AdornedElement - la zone de texte. Donc, nous pourrions définir l'info-bulle de la Frontière, avec cette. (Cependant, cette Liaison semble échouer à la mise à jour de l'info-bulle de la Frontière. Il fonctionne quand je la regarde avec Snoop et après qu'il affiche.)
Ainsi, la zone de texte possède son AttachedProperty de Validation où l'on peut trouver le ErrorContent donc il doit définir sa propre info-bulle comme vous l'avez fait lors de votre dernier exemple, sinon ça ne marchera pas.
OriginalL'auteur
Je sais je suis en retard, mais permettez-moi de partager une solution que j'ai trouvé l'étude de cette question: WPF validateur personnalisé avec info-bulle.
Dans sa forme la plus simple ce
ErrorTemplate
ne montre qu'uneTooltip
avec leErrorContent
pour l'ensemble de laAdornedElement
.Mais bien sûr, vous pouvez décorer comme vous le souhaitez par exemple avec un
Tooltip
pour seulement un marqueur.Mettre cette
Template
dansResources
et tout ce que vous avez à faire est de définir laValidation.ErrorTemplate
.Même cette fâcheuse Déclencheur n'est plus nécessaire.
Vous avez raison. La première solution n'est utile que pour les contrôles montrant une erreur. Mais peut-être que la deuxième solution est de toute façon ce que vous voulez.
La deuxième solution fonctionne très bien pour une zone de texte, mais pas pour une zone de liste déroulante. Je ne peux pas cliquer sur la zone de liste déroulante à tous si j'ai IsHitTestVisible défini à true, ce qui semble être nécessaire afin d'obtenir l'info-bulle pour le travail. Toutes les pensées?
Juste essayé avec une zone de liste modifiable et n'avait pas de problèmes (info-bulle est de montrer sans aucune modification de code). Je pense que le problème est dû à un autre endroit.
L'info-bulle se montrait très bien, mais ensuite, je ne pouvais pas cliquer sur la zone de liste déroulante pour obtenir la liste déroulante apparaît. Si j'ai mis IsHitTestVisible pour de faux, j'ai pu interagir avec la zone de liste déroulante, mais l'info-bulle n'apparaissent pas. Avez-vous été capable d'interagir avec la zone de liste déroulante et de voir l'info-bulle?
OriginalL'auteur