C1RichTextBox は、ユーザーの対話式操作を実装するための標準メカニズムとしてハイパーリンクをサポートします。さらに、カスタムのマウス対話機能を追加して提供することもできます。たとえば、ユーザーが要素をクリックしたときに、カスタム書式を適用したり、コンテキストメニューを表示することができます。
このようなシナリオを可能にするために、C1RichTextBox には、ElementMouse* イベントと GetPositionFromPoint メソッドが公開されています。
マウスイベントをトリガした要素を確認するだけでよい場合は、イベントハンドラの source パラメータから取得できます。より詳細な情報(要素内でクリックされた単語など)が必要な場合は、GetPositionFromPoint メソッドが必要です。GetPositionFromPoint はクライアント座標でポイントを受け取り、その位置をドキュメント座標で表す C1TextPosition オブジェクトを返します。
C1TextPosition オブジェクトには、Element と Offset という2つの主要なプロパティがあります。Element プロパティはドキュメント内の要素を表し、Offset プロパティは文字インデックス(要素が C1Run の場合)または指定されたポイントにある子要素のインデックスです。
たとえば、次のコードは、C1RichTextBox を作成し、ハンドラを ElementMouseLeftButtonDown イベントに関連付けます。
次のイベントハンドラは、クリックされた要素全体に対して FontWeight プロパティを切り替えます。この要素は、単語、文、または段落全体の場合もあります。
このコードは、sender パラメータを C1Run オブジェクトにキャストして、クリックされた要素を取得します。
単語の FontWeight valueを切り替える場合は、クリックされた文字を特定してから選択範囲を単語全体に拡張する必要があります。ここで GetPositionFromPoint メソッドが必要になります。次に、これを行うイベントハンドラの改訂バージョンを示します。
FontWeight プロパティは、null 可能な値を返します。この範囲内で、この属性に複数の値が混ざって含まれる場合、このプロパティは null を返します。FontWeight プロパティを切り替えるために使用するコードは、以前に書式設定ツールバーを実装したときに使用したコードと同じです。
GetPositionFromPoint を使用すると、画面上のポイントから C1TextPosition オブジェクトを取得できます。GetRectFromPosition メソッドは逆の操作を実行します。すなわち、C1TextPosition オブジェクトの画面上の位置を表す Rect を返します。これは、ドキュメントの特定部分の近くに UI 要素を表示するような場合に役立ちます。