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), и он, кажется, копает его.