Ответ 1
Просто попробуйте следующее:
TextRange tr = new TextRange(rtb.Document.ContentEnd, rtb.Document.ContentEnd);
tr.Text = "textToColorize";
tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
Я использую функцию RichTextBox.AppendText
, чтобы добавить строку в мой RichTextBox
. Я хотел бы установить это с определенным цветом. Как я могу это сделать?
Просто попробуйте следующее:
TextRange tr = new TextRange(rtb.Document.ContentEnd, rtb.Document.ContentEnd);
tr.Text = "textToColorize";
tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
Если вы хотите, вы также можете сделать его методом расширения.
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) { }
}
Это сделает так, что вы можете просто сделать
myRichTextBox.AppendText("My text", "CornflowerBlue");
или в шестнадцатеричном виде, например
myRichTextBox.AppendText("My text", "0xffffff");
Если введенная вами цветовая строка недействительна, она просто вводит ее в цвет по умолчанию (черный). Надеюсь, это поможет!
Я потратил много времени, вырывая свои волосы, потому что TextRange
не хватало для моего случая использования. Этот метод позволяет избежать накладных расходов. Я выполнил несколько тестов barebone-тестов, и они стали быстрее примерно в 10 раз (но не поверьте мне на слово, лол, запустите свои собственные тесты)
Paragraph paragraph = new Paragraph();
Run run = new Run("MyText");
paragraph.Inlines.Add(run);
myRichTextBox.Document.Blocks.Add(paragraph);
Примечание: Я думаю, что большинство вариантов использования должно работать нормально с TextRange
. Мой вариант использования включал сотни отдельных добавлений, и эти накладные расходы складываются.
приведенный выше однострочный ответ: -
myRichTextBox.AppendText("items", "CornflowerBlue")
не работает. Правильный способ записи (я использую VS 2017): -
Dim text1 As New TextRange(myRichTextBox.Document.ContentStart, myRichTextBox.Document.ContentEnd)
myRichTextBox.AppendText("items")
text1.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.CornflowerBlue)