Comment obtenir la couleur de caractère de la zone de texte enrichi?

J’ai une application de zone de texte riche et je dois effectuer deux opérations de contrôle.

1) Je dois mettre en évidence seulement un pourcentage de caractère du texte de la zone de texte enrichi.

Exemple: Supposons que je dispose de 100 caractères sans espace. En cela, j’ai besoin de validation que l’utilisateur ne peut pas mettre en évidence que certains caractères autorisés.

Moyens j’ai 100 caractères et admin ne permettent que pour 20%, alors l’utilisateur ne peut mettre en évidence que 20%. La couleur de base des caractères est noire et signifie que l’utilisateur ne peut changer la couleur d’aucun caractère. L’utilisateur ne peut modifier que 20 caractères dans n’importe quelle couleur.

2) Supposons que l’utilisateur a surligné un texte. L’utilisateur utilisateur peut alors marquer n’importe quel texte avec celui qui est mis en évidence en tant que commentaire.

J’ai fait beaucoup de recherches pour cela mais je n’ai pas eu de solution s’il vous plaît aidez-moi à trouver la solution.

Eh bien, je suppose que c’est un RichTextBox WPF que vous vous posez, basé sur la balise ‘desktop-application’. Donc, dans le WPT RichTextBox, vous avez un object TextRange, qui contient un ApplyPropertyValue .

Vous souhaitez donc obtenir un TextRange qui couvre les caractères souhaités, puis appliquer la propriété TextElement.Foreground à un pinceau de votre choix.

Par exemple, si vous voulez que les caractères 20-40 soient rouges, vous pourriez faire quelque chose comme ceci:

var range = new TextRange( rtb.Document.ContentStart.GetPositionAtOffset(20), rtb.Document.ContentStart.GetPositionAtOffset(40)); range.ApplyProperty(TextElement.ForegroundProperty, Brushes.Red); 

Il est intéressant de noter que lorsque vous appliquez une propriété comme celle-ci, en interne, le texte sera divisé en plusieurs exécutions et l’obtention de la position par décalage ne fonctionnera pas de la même manière. Dans ce cas, vous devriez obtenir un TextRange pour tout le document et appeler ClearAllProperties ou utiliser un TextPointer et effectuer une itération sur les exécutions.