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");
または16進数など
myRichTextBox.AppendText("My text", "0xffffff");
入力したカラー文字列が無効な場合は、デフォルトの色(黒)で入力するだけです。お役に立てれば!
上記の単一行の答え:-
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)
TextRange
は私のユースケースには十分な速さではなかったので、私は髪を引き裂くのに多くの時間を費やしました。この方法は、オーバーヘッドを回避します。私はいくつかの最低限のテストを実行しましたが、その速度は約10倍速くなりました(ただし、私の言葉を信じないでください、独自のテストを実行してください)
Paragraph paragraph = new Paragraph();
Run run = new Run("MyText");
paragraph.Inlines.Add(run);
myRichTextBox.Document.Blocks.Add(paragraph);
注:ほとんどのユースケースはTextRange
で正常に機能するはずです。私のユースケースには何百もの個別の追加が含まれ、そのオーバーヘッドは積み重なっていきます。