次のテキストを含むWPF.NET4.0RichTextBoxの場合:
アップル
チーズ
オレンジ
梨
鶏
プログラムでC#(XAMLマークアップではない)を使用して、文字「C」で始まるすべての行を太字にするにはどうすればよいですか?
より一般的には、RichTextBoxから特定のテキスト行への参照を取得し、それにフォーマットを適用するにはどうすればよいですか?
次のテキストを含むWPF.NET4.0RichTextBoxの場合:
アップル
チーズ
オレンジ
梨
鶏
プログラムでC#(XAMLマークアップではない)を使用して、文字「C」で始まるすべての行を太字にするにはどうすればよいですか?
より一般的には、RichTextBoxから特定のテキスト行への参照を取得し、それにフォーマットを適用するにはどうすればよいですか?
それは私が予想していたよりもトリッキーでしたが、以下のコードはそれを行うと思います:
foreach (var paragraph in richTextBox1.Document.Blocks)
{
var text = new TextRange(paragraph.ContentStart,
paragraph.ContentEnd).Text;
paragraph.FontWeight = text.StartsWith("C") ?
FontWeights.Bold : FontWeights.Normal;
}
基本的に、RichTextBoxはそのコンテンツをFlowDocument(Documentプロパティからアクセス)に保持します。FlowDocumentには、各段落を含むブロックのコレクションがあります。実際、Blocksコレクションの各アイテムは、抽象クラスBlockから派生したものであれば何でもかまいません...しかし、RichTextBoxに単純なテキストを追加するだけであれば、それらは常に段落になると思います。より良い説明についてはここを参照してください!
最も難しい部分は、段落からテキストを取得するには、 TextRangeクラスを使用する必要があることです...しかし、良いニュースは、テキストを取得すると、段落にフォントの太さなどを設定するための単純なプロパティがあることです。 !!