WPF RichTextBox добавляет цветной текст

Я использую функцию RichTextBox.AppendText, чтобы добавить строку в мой RichTextBox. Я хотел бы установить это с определенным цветом. Как я могу это сделать?

Ответы

Ответ 1

Просто попробуйте следующее:

TextRange tr = new TextRange(rtb.Document.ContentEnd,­ rtb.Document.ContentEnd);
tr.Text = "textToColorize";
tr.ApplyPropertyValue(TextElement.­ForegroundProperty, Brushes.Red);

Ответ 2

Если вы хотите, вы также можете сделать его методом расширения.

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");

Если введенная вами цветовая строка недействительна, она просто вводит ее в цвет по умолчанию (черный). Надеюсь, это поможет!

Ответ 3

Будьте в курсе накладных расходов TextRange

Я потратил много времени, вырывая свои волосы, потому что TextRange не хватало для моего случая использования. Этот метод позволяет избежать накладных расходов. Я выполнил несколько тестов barebone-тестов, и они стали быстрее примерно в 10 раз (но не поверьте мне на слово, лол, запустите свои собственные тесты)

Paragraph paragraph = new Paragraph();
Run run = new Run("MyText");
paragraph.Inlines.Add(run);
myRichTextBox.Document.Blocks.Add(paragraph);

Credit

Примечание: Я думаю, что большинство вариантов использования должно работать нормально с TextRange. Мой вариант использования включал сотни отдельных добавлений, и эти накладные расходы складываются.

Ответ 4

приведенный выше однострочный ответ: -

  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)