2009-02-19 21 views
15

我正在爲特定領域的語言創建文本編輯器。我使用WPF RichTextBox作爲基本控件。我不知道如何優美地包含行號。有誰知道任何例子?WPF RichTextBox使用行號創建編輯器

+0

我沒有足夠的智慧來完成這項工作。我一直無法弄清RichTextBox何時滾動,以便我可以嘗試滾動ListBox相同的數量。而且,由於RTB中的行太長,它會自動包裝它們的顯示,並且在這種情況下我應該省略ListBox行數。 – 2009-02-19 22:20:48

回答

3

我會創建一個複合控件,在左側使用堆棧面板控件和文本塊來處理行編號。如果您關心的是行數和視覺元素太多,那麼您可以在虛擬模式下使用ListBox。

您必須連接到RichTextBox上的各種事件,以便知道何時更新列表框以及計算每行的高度,但應該使用附加到RichTextBox的FlowDocument進行操作。

+0

我不確定我是否喜歡這個想法 - 保持列表框文本基線與RichEdit基線內聯可能會有問題(當然,如果他的代碼格式化程序允許不同的字體) - 但由於我沒有替代方案,因此+1 – 2009-02-19 22:12:53

+0

我沒有足夠的智慧來完成這項工作。我一直無法弄清RichTextBox何時滾動,以便我可以嘗試滾動ListBox相同的數量。而且,由於RTB中的行太長,它會自動包裝它們的顯示,並且在這種情況下我應該省略ListBox行數。 – 2009-02-20 04:50:20

3

RichText支持「受保護」 - 不可編輯 - 跨度。您可以將行號作爲受保護的文本跨度轉儲爲RTF流的一部分(當您執行格式化時)。

在Win Forms中,您可以使用RichTextBox.SelectionProtected Property。 WPF必須有類似的東西。

這樣,你所有的基線都是正確的,你不需要做任何額外的思考/編程來讓編輯器正常工作。可編輯文本將是可編輯的,並且行號不會。

唯一的缺點是每次編輯後都必須重新提交RTF流。但我想你已經這樣做了,提供解析格式/錯誤診斷/任何。

2

如何使用AqiStar的富文本WPF控件? AqiStar.TextBox

我不爲他們工作......我只知道Oren在他的NHibernate Profiler(NHProf)中使用這個產品,他似乎在挖掘它。

7

AvalonEdit是一個很好的,它是開源的。我認爲它幾乎具有語法高亮和摺疊等Aqistar控件的所有功能。易於配置和使用。進一步的細節可以找到hereenter image description here