前述のように、C1RichTextBox がコントロールコンテンツの線形的でフラットなビューを提供する一方、C1Document はドキュメント構造を公開します。
ドキュメントのオブジェクトを直接操作するメリットを示すために、ユーザーが[Ctrl]キーを押したときに、Heading2 タイプのすべての段落のテキストを大文字にする機能を前の例に追加します。
C1RichTextBox が公開するオブジェクトモデルには、これを確実に実行できる機能はありません。書式設定に基づいてスパンの場所を特定する必要がありますが、それは非効率で信頼性も高くありません。ユーザーが Heading2 で使用されている書式設定と同じ書式をプレーンテキストに設定していたらどうなるでしょう。
C1Document オブジェクトモデルを使用すると、このタスクを容易に実行できます。InitializeComponent() メソッド内で KeyDown イベントを処理するだけです。
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
public MainPage()
{
this.InitializeComponent();
//ここは変更しません...
// 2番目の C1RichTextBox を同じドキュメントに連結します
rtb2.Document = _rtb.Document;
rtb2.KeyDown += rtb2_KeyDown;
}
void rtb2_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Control)
{
var h2 = _rtb.Document.Blocks.OfType<Heading2>().FirstOrDefault();
if (h2 != null)
h2.ContentRange.ToUppercase();
}
}
|
|
このコードはキーボード入力を監視します。ユーザーが[Ctrl]キーを押すと、ドキュメント内のすべての Heading2 要素が列挙され、そのコンテンツが大文字に変換されます。