我正在为特定领域的语言创建一个文本编辑器。我使用 WPFRichTextBox
作为基本控件。我不知道如何优雅地包含行号。有谁知道任何例子?
4 回答
AvalonEdit是一个很好的工具,它是开源的。我认为它几乎具有 Aqistar 控件的所有功能,例如语法高亮和折叠。易于配置和使用。更多细节可以在这里找到。
我将创建一个复合控件,左侧有一个堆栈面板控件和文本块,用于处理行号。如果您担心行数和视觉元素过多,那么您可以在虚拟模式下使用 ListBox。
您必须连接 RichTextBox 上的各种事件,以便知道何时更新 ListBox,以及计算每行的高度,但这应该可以通过附加到 RichTextBox 的 FlowDocument 来实现。
RichText 支持“受保护”(不可编辑)跨度。您可以将行号转储为受保护的文本跨度作为 RTF 流的一部分(当您进行格式化时)。
在 Win Forms 中,您可以使用RichTextBox.SelectionProtected Property。WPF 必须有类似的东西。
这样,您的所有基线都将是正确的,您无需进行任何额外的思考/编程即可使编辑器正常运行。可编辑的文本将是可编辑的,而行号将是不可编辑的。
唯一的缺点是您必须在每次编辑后重新提交 RTF 流。但我想你已经这样做是为了提供解析格式/错误诊断/任何东西。
使用 AqiStar 的富文本 WPF 控件怎么样? AqiStar.TextBox
我不为他们工作……我只知道 Oren 在他的 NHibernate Profiler (NHProf) 中使用了这个产品,他似乎很喜欢它。