17

我正在为特定领域的语言创建一个文本编辑器。我使用 WPFRichTextBox作为基本控件。我不知道如何优雅地包含行号。有谁知道任何例子?

4

4 回答 4

7

AvalonEdit是一个很好的工具,它是开源的。我认为它几乎具有 Aqistar 控件的所有功能,例如语法高亮和折叠。易于配置和使用。更多细节可以在这里找到。 在此处输入图像描述

于 2011-09-20T07:05:08.363 回答
3

我将创建一个复合控件,左侧有一个堆栈面板控件和文本块,用于处理行号。如果您担心行数和视觉元素过多,那么您可以在虚拟模式下使用 ListBox。

您必须连接 RichTextBox 上的各种事件,以便知道何时更新 ListBox,以及计算每行的高度,但这应该可以通过附加到 RichTextBox 的 FlowDocument 来实现。

于 2009-02-19T22:08:52.130 回答
3

RichText 支持“受保护”(不可编辑)跨度。您可以将行号转储为受保护的文本跨度作为 RTF 流的一部分(当您进行格式化时)。

在 Win Forms 中,您可以使用RichTextBox.SelectionProtected Property。WPF 必须有类似的东西。

这样,您的所有基线都将是正确的,您无需进行任何额外的思考/编程即可使编辑器正常运行。可编辑的文本将是可编辑的,而行号将是不可编辑的。

唯一的缺点是您必须在每次编辑后重新提交 RTF 流。但我想你已经这样做是为了提供解析格式/错误诊断/任何东西。

于 2009-02-19T22:15:01.553 回答
2

使用 AqiStar 的富文本 WPF 控件怎么样? AqiStar.TextBox

我不为他们工作……我只知道 Oren 在他的 NHibernate Profiler (NHProf) 中使用了这个产品,他似乎很喜欢它。

于 2009-02-19T22:20:54.303 回答