RichTextBox for WPF
分割表示の実装
C1Document オブジェクトの使い方 > 分割表示の実装

多くのエディタにはドキュメントの分割表示機能があり、ドキュメントの一部を表示しながら、別の部分を作業することができます。

これは、2つ以上の C1RichTextBox コントロールを同じ基底の C1Document に連結することによって簡単に実現できます。各コントロールは独立したビューとして動作するので、通常どおりにドキュメントをスクロール、選択、および編集できます。1つのビューへの変更は、他のすべてのビューに反映されます。

この動作を示すために、ページのコンストラクタに数行のコードを追加して、前の例を拡張します。

コードのコピー
Public Sub New()
   ' デフォルトの初期化
   InitializeComponent()
   ' C1RichTextBox を作成してページに追加します
   _rtb = New C1RichTextBox()
   LayoutRoot.Children.Add(_rtb)
   ' ドキュメントを作成して C1RichTextBox に表示します
   _rtb.Document = DocumentAssembly(GetType(C1RichTextBox).Assembly)
   _rtb.IsReadOnly = True
   ' イベントハンドラを関連付けます
   AddHandler _rtb.ElementMouseLeftButtonDown, AddressOf _rtb_ElementMouseLeftButtonDown
   ' ページに2番目の C1RichTextBox を追加します
   LayoutRoot.RowDefinitions.Add(New RowDefinition())
   LayoutRoot.RowDefinitions.Add(New RowDefinition())
   Dim rtb2 = New C1RichTextBox()
   rtb2.SetValue(Grid.RowProperty, 1)
   LayoutRoot.Children.Add(rtb2)
 ' 2番目の C1RichTextBox を同じドキュメントに連結します
   rtb2.Document = _rtb.Document
End Sub
コードのコピー
public MainPage()
{
  // デフォルトの初期化
  InitializeComponent();
  // C1RichTextBox を作成してページに追加します
  _rtb = new C1RichTextBox();
  LayoutRoot.Children.Add(_rtb);
  // ドキュメントを作成して C1RichTextBox に表示します
  _rtb.Document = DocumentAssembly(typeof(C1RichTextBox).Assembly);
  _rtb.IsReadOnly = true;
  // イベントハンドラを関連付けます
  _rtb.ElementMouseLeftButtonDown += _rtb_ElementMouseLeftButtonDown;
  // ページに2番目の C1RichTextBox を追加します
  LayoutRoot.RowDefinitions.Add(new RowDefinition());
  LayoutRoot.RowDefinitions.Add(new RowDefinition());
  var rtb2 = new C1RichTextBox();
  rtb2.SetValue(Grid.RowProperty, 1);
  LayoutRoot.Children.Add(rtb2);
  // 2番目の C1RichTextBox を同じドキュメントに連結します
  rtb2.Document = _rtb.Document;
}

この新しいコードは、新しい C1RichTextBox をページに追加し、次に元の C1RichTextBox によって表示されるドキュメントを Document プロパティに設定します。

プロジェクトを再度実行すると、次のようなウィンドウが表示されます。

下部のコントロールは編集可能です(IsReadOnly プロパティを False に設定していません)。そこに入力すると、両方のコントロールに変更が同時に表示されます。

このメカニズムは一般的です。さらに多くのビューを同じドキュメントに簡単に連結できます。さらに、基底のドキュメントに対する変更は、すべてのビューに即座に反映されます。