Dans une zone de texte wpf, puis-je transformer des caractères d'une chaîne dépassant une certaine longueur en rouge?
-
05-07-2019 - |
Question
J'utilise un contrôle TextBox
et je veux que les caractères deviennent rouges après un certain nombre de caractères pour montrer aux utilisateurs qu'ils ont trop tapé. Je ne veux pas tronquer car l'utilisateur aurait peut-être saisi cette "pensée vraiment importante". et si je les tronquais, ils le perdraient. J'ai validé mon modèle commercial sous-jacent qui m'indique quand l'entrée est invalide et je nomme ma Zone de texte
pour indiquer l'invalidité.
Je souhaite également style
. Puis-je faire cela en utilisant une TextBox
ou dois-je aller à un RichTextBox
? Ma valeur sous-jacente est juste une chaîne droite.
La solution
Je suppose que vous utilisez le mécanisme de validation WPF d'origine - ValidationRules
. Si tel est le cas, vous devez définir un déclencheur
sur Validation.HasError == true
et définir les propriétés TextBox
selon les besoins. Par exemple, ce qui suit mettra le texte en rouge en surbrillance s'il n'est pas valide.
<TextBox>
<TextBox.Text>
<Binding ...>
<Binding.ValidationRules>
...
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="Foreground" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
Autres conseils
C'est une sorte de réponse folle et je ne l'ai pas encore essayée, mais si cela fonctionne, vous pourrez continuer à utiliser une zone de texte au lieu d'une riche zone de texte.
Que se passe-t-il si vous utilisez un pinceau dégradé pour peindre le texte (ou si ce n’est pas le texte, l’arrière-plan de la zone de texte, si cela vous semble acceptable)?
Vous construirez le dégradé de manière à ce qu'il soit blanc jusqu'au point où l'entrée est devenue trop longue et rouge ensuite. Bien entendu, jusqu'à ce que le texte soit trop long, le pinceau serait tout blanc.
Cela impliquerait une mesure du texte pour obtenir la définition du dégradé correcte (étant donné que les polices proportionnelles entraîneraient une taille différente de la zone valide en fonction des lettres entrées) et il faudrait que le pinceau soit calculé et attribué à chaque caractère saisi.