2009-02-19 24 views
15

ドメイン固有の言語のテキストエディタを作成しています。私はWPF RichTextBoxを基本コントロールとして使用しています。私は正常に行番号を付ける方法を知らない。誰かが例を知っていますか?行番号付きエディタを作成するためのWPF RichTextBox

+0

私はその作業を行うには十分スマートではありませんでした。 RichTextBoxがスクロールしているときに、ListBoxを同じ量だけスクロールできるようにすることができませんでした。また、RTBで線が長くなり過ぎると自動的に表示が折り返され、その場合はListBoxの行番号を省略してください。 –

答えて

3

スタックコントロールパネルとテキストブロックを左に付けて、行番号を扱うコンポジットコントロールを作成します。線の数が多く、ビジュアル要素が多すぎる場合は、仮想モードでListBoxを使用できます。

ListBoxをいつ更新するか、各行の高さを計算するが、RichTextBoxに添付されたFlowDocumentで実行できるようにするには、RichTextBoxのさまざまなイベントに接続する必要があります。

+0

リッチエディットのベースラインとインラインでリストボックスのテキストベースラインを維持することは問題があるかもしれません(コードフォーマッタが別のフォントを許可している場合は間違いなく) - しかし、代替案がないので、+1 –

+0

私はその仕事をするほどスマートではなかった。 RichTextBoxがスクロールしているときに、ListBoxを同じ量だけスクロールできるようにすることができませんでした。また、RTBで線が長くなり過ぎると自動的に表示が折り返され、その場合はListBoxの行番号を省略してください。 –

3

リッチテキストは "保護された" - 編集不可能なスパンをサポートします。行番号を保護されたテキストスパンとしてRTFストリームの一部としてダンプすることができます(書式設定を行うとき)。

Winフォームでは、RichTextBox.SelectionProtected Propertyを使用できます。 WPFには何か類似している必要があります。

このようにして、すべてのベースラインが正確になり、エディタを適切に動作させるために余分な思考/プログラミングを行う必要はありません。編集可能なテキストは編集可能であり、行番号は編集できません。

編集するたびにRTFストリームを再送信する必要があるという欠点があります。しかし、私はあなたがすでに構文解析/エラー診断/何かを提供するためにこれをやっていると思います。

2

AqiStarのリッチテキストWPFコントロールの使用はどうですか? AqiStar.TextBox

私は彼らのために働いていません...私はOrenがNHibernate Profiler(NHProf)でこの製品を使用していることを知り、彼はそれを掘り起こすようです。

+0

残念ながら、私の雇用者は、私たちのソリューションでライセンスを取得しなければならないソフトウェアを私たちに含めることはできません。 –

7

AvalonEditはいいですし、オープンソースです。構文の強調表示や折りたたみなど、Aqistarコントロールのほとんどの機能があると思います。簡単に設定して使用してください。詳細は、hereを参照してください。 enter image description here

関連する問題