WPF RichTextBox для создания редактора с номерами строк

Я создаю текстовый редактор для определенного для домена языка. Я использую WPF RichTextBox в качестве основного элемента управления. Я не знаю, как изящно включать нумерацию строк. Кто-нибудь знает какие-либо примеры?

Ответы

Ответ 1

AvalonEdit является хорошим, и это с открытым исходным кодом. Я думаю, что у него есть почти все функции Aqistar control, такие как подсветка синтаксиса и фальцовка. Простота настройки и использования. Более подробную информацию можно найти здесь здесь. enter image description here

Ответ 2

Я бы создал составной элемент управления с панелью управления панелью и текстовыми блоками слева, которые вы использовали бы для обработки нумерации строк. Если вас беспокоит количество строк и слишком много визуальных элементов, вы можете использовать ListBox в виртуальном режиме.

Вам нужно будет подключиться к различным событиям в RichTextBox, чтобы вы знали, когда обновлять ListBox, а также вычислять высоту каждой строки, но это должно выполняться с FlowDocument, прикрепленным к RichTextBox.

Ответ 3

RichText поддерживает "protected" - uneditable - охватывает. Вы можете сбросить свои номера строк в виде защищенных текстовых пространств в составе потока RTF (при форматировании).

В Win Forms вы можете использовать RichTextBox.SelectionProtected Property. WPF должен иметь что-то подобное.

Таким образом, все ваши базовые линии будут правильными, и вам не придется делать лишнее мышление/программирование, чтобы заставить редактора правильно вести себя. Редактируемый текст будет доступен для редактирования, а номера строк не будут.

Только нижняя сторона заключается в том, что после каждого редактирования вам необходимо повторно передать поток RTF. Но я предполагаю, что вы уже делали это для обеспечения форматирования/диагностики ошибок/независимо.

Ответ 4

Как использовать расширенный WPF-контроль AqiStar? AqiStar.TextBox

Я не работаю для них... Я просто знаю, что Орен использует этот продукт в своем NHibernate Profiler (NHProf), и он, кажется, копает его.