J'applique la mise en forme aux jetons sélectionnés dans un RichTextBox WPF. Pour ce faire, je reçois une TextRange qui englobe le jeton que je voudrais mettre en évidence. Je vais donc changer la couleur du texte comme celui-ci:WPF RichTextBox - Formatage de texte tapé
// Get start and end pointer for token
TextPointer startPointer = run.ContentStart.GetPositionAtOffset(startOffset);
TextPointer endPointer = run.ContentStart.GetPositionAtOffset(endOffset);
// Get text range for token
TextRange textRange = new TextRange(startPointer, endPointer);
// Highlight token
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue);
Ce qui se passe sur l'événement TextChanged de mon RichTextBox.
La mise en forme est appliquée comme prévu, mais si vous continuez à saisir du texte, le nouveau texte héritera de la mise en forme qui a déjà été appliquée au mot adjacent. Je souhaite que la mise en forme de tout nouveau texte utilise les options de mise en forme par défaut définies dans les propriétés RichTextBox. Est-ce possible? Sinon, je pourrais mettre en évidence tous les jetons que je ne veux pas être bleu avec les options de formatage par défaut, mais cela me semble gênant.
Merci pour votre réponse Benny. Oui, c'est le comportement standard mais j'essaye d'implémenter la coloration syntaxique et préférerais ne pas le faire. Dans l'événement TextChanged, j'appelle simplement ma routine d'analyse qui produit des jetons qui ont les positions de début et de fin que j'utilise pour créer la TextRange (j'ai ajouté ce code à ma question d'origine). L'utilisation d'espaces blancs comme délimiteur est une possibilité mais je préfère l'éviter car les espaces ne sont pas garantis. Merci, Alan –
Eh bien, il ne doit pas être un espace comme délimiteur. Ce que je suggérais, c'est de ** attendre ** pour appliquer le style jusqu'à ce que le curseur soit à 'endOffset + 1', donc il y a quelque chose entre le curseur et la plage de texte. Donc, même après avoir tapé "SomeToken |' * * * juste * en tapant "n", le jeton n'est pas encore sélectionné. Mais, quand je tape le caractère * next *, SomeToken {| ', alors le jeton est trouvé et stylé quand j'entre" {"(ou n'importe quel autre caractère). J'ai remarqué que la coloration syntaxique fonctionne comme ça dans d'autres programmes. Désolé si je n'étais pas clair. J'espère que c'est plus clair. –
Merci encore Benny.Ne vous inquiétez pas, vous étiez très clair. Ce que j'essayais d'éviter était une réinitialisation complète de la mise en forme sur chaque analyse mais je peux toujours voir des situations où le comportement de la RichTextBox quand elle hérite le formatage adjacent qui me causera des problèmes si je ne réinitialise pas complètement le formatage. Je suis sûr qu'il y aura un juste milieu. Merci, Alan –