web-dev-qa-db-ja.com

色付きのテキストを追加するWPFRichTextBox

RichTextBox.AppendText関数を使用してRichTextBoxに文字列を追加しています。これを特定の色に設定したいと思います。これどうやってするの?

20
Aks

これを試してみてください:

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

必要に応じて、拡張メソッドにすることもできます。

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

または16進数など

myRichTextBox.AppendText("My text", "0xffffff");

入力したカラー文字列が無効な場合は、デフォルトの色(黒)で入力するだけです。お役に立てれば!

14
omni

上記の単一行の答え:-

  myRichTextBox.AppendText("items", "CornflowerBlue")

それが書かれるべき正しい方法は(私はVS2017を使用しています):-

    Dim text1 As New TextRange(myRichTextBox.Document.ContentStart, myRichTextBox.Document.ContentEnd)
  myRichTextBox.AppendText("items")
  text1.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.CornflowerBlue) 
0
user1744515

TextRangeのオーバーヘッドに注意してください

TextRangeは私のユースケースには十分な速さではなかったので、私は髪を引き裂くのに多くの時間を費やしました。この方法は、オーバーヘッドを回避します。私はいくつかの最低限のテストを実行しましたが、その速度は約10倍速くなりました(ただし、私の言葉を信じないでください、独自のテストを実行してください)

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

クレジット

注:ほとんどのユースケースはTextRangeで正常に機能するはずです。私のユースケースには何百もの個別の追加が含まれ、そのオーバーヘッドは積み重なっていきます。

0
Tony