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