3

avalonedit コントロールの可視テキストを取得しようとしましたが、wordwrapVisualLines[]のみを処理しTextLines[]、TextLine が可視領域にあるかどうかを確認する方法がわかりません。

テキストビューに表示されているテキストの開始および終了オフセット(または長さ)を取得できれば問題も解決しますが、そのような関数やメンバーが見つかりませんでした...

誰でも私を助けることができますか?どうも

4

1 に答える 1

4

TextView.GetPositionテキスト ビューのコーナーのドキュメントの位置を取得するために使用できます。

TextViewPosition? start = textView.GetPosition(new Point(0, 0) + textView.ScrollOffset);
TextViewPosition? end = textView.GetPosition(new Point(textView.ActualWidth, textView.ActualHeight) + textView.ScrollOffset);

TextDocument.GetOffsetTextViewPosition をオフセットに変換するために使用できます。指定されたポイントに行がない場合に戻ることができることに注意してくださいnull-可視領域内で、これは可視領域の終わりがドキュメントの終わりの後ろにある場合にのみ発生するはずです。そのような場合のドキュメント:

int startOffset = start != null ? document.GetOffset(start.Value.Location) : document.TextLength;
int endOffset = end != null ? document.GetOffset(end.Value.Location) : document.TextLength;

ただし、必要に応じて、VisualLine/TextLines を直接操作することもできVisualLine.VisualTopます。ビジュアル ラインの開始位置 (Y 座標) が示され、VisualLine 内のすべての TextLine にHeightプロパティがあります。これらを使用して、どのテキスト行が表示されているかを判断し、そのGetCharacterHitFromDistanceメソッドを使用してビジュアル列を取得し、 を使用VisualLine.GetRelativeOffsetしてビジュアル列からのテキスト オフセットを計算できます。(これはTextView.GetPositionメソッドが行っていることです)

于 2010-10-21T21:15:41.033 に答える