Dans une zone de texte wpf, puis-je transformer des caractères d'une chaîne dépassant une certaine longueur en rouge?

StackOverflow https://stackoverflow.com/questions/1204412

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top