J'utilise le RichTextBox.AppendText
pour ajouter une chaîne à mon RichTextBox
. J'aimerais lui donner une couleur particulière. Comment puis-je le faire ?
Réponses
Trop de publicités?Si vous le souhaitez, vous pouvez également en faire une méthode d'extension.
public static void AppendText(this RichTextBox box, string text, string color)
{
BrushConverter bc = new BrushConverter();
TextRange tr = new TextRange(box.Document.ContentEnd, box.Document.ContentEnd);
tr.Text = text;
try
{
tr.ApplyPropertyValue(TextElement.ForegroundProperty,
bc.ConvertFromString(color));
}
catch (FormatException) { }
}
Cela vous permettra de faire
myRichTextBox.AppendText("My text", "CornflowerBlue");
ou en hexagone comme
myRichTextBox.AppendText("My text", "0xffffff");
Si la chaîne de couleur que vous tapez n'est pas valide, il la tape simplement dans la couleur par défaut (noir). J'espère que cela vous aidera !
Attention à la surcharge de TextRange
J'ai passé beaucoup de temps à m'arracher les cheveux, parce que TextRange
n'était pas assez rapide pour mon cas d'utilisation. Cette méthode évite les frais généraux. J'ai effectué quelques tests de base, et elle est plus rapide d'un facteur d'environ 10. (mais ne me croyez pas sur parole lol, faites vos propres tests)
Paragraph paragraph = new Paragraph();
Run run = new Run("MyText");
paragraph.Inlines.Add(run);
myRichTextBox.Document.Blocks.Add(paragraph);
Note : Je pense que la plupart des cas d'utilisation devraient fonctionner correctement avec TextRange
. Mon cas d'utilisation impliquait des centaines d'ajouts individuels, et cette surcharge s'accumule.
Juste un exemple complet qui mélange la question originale avec une remarque précédente de Tony.
var paragraph = new Paragraph();
var run = new Run(message)
{
Foreground = someBrush
};
paragraph.Inlines.Add(run);
myRichTextBox.Document.Blocks.Add(paragraph);
Maintenant, c'est rapide et coloré :)
Notez que (contrairement à la solution TextRange) cette solution m'a également permis de résoudre un problème de rupture de ligne survenant à la première ligne de la RichTextBox.
J'ai fini par synthétiser les réponses d'Omni et de Kishores et par créer ainsi une méthode d'extension :
public static void AppendText(this System.Windows.Controls.RichTextBox box, string text, SolidColorBrush brush)
{
TextRange tr = new TextRange(box.Document.ContentEnd, box.Document.ContentEnd);
tr.Text = text;
tr.ApplyPropertyValue(TextElement.ForegroundProperty, brush);
}
Ce qui peut être appelé ainsi :
MyTextBox.AppendText("Some Text\n", Brushes.Green);
- Réponses précédentes
- Plus de réponses