【问题标题】:WPF RichTextBox to create editor with line numbers [closed]WPF RichTextBox 使用行号创建编辑器 [关闭]
【发布时间】:2010-10-08 17:16:08
【问题描述】:

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

【问题讨论】:

  • 我不够聪明,无法完成这项工作。我无法弄清楚 RichTextBox 何时滚动,以便我可以尝试滚动 ListBox 相同的量。而且,由于 RTB 中的行太长,它会自动换行显示,在这种情况下我应该省略 ListBox 行号。

标签: wpf richtextbox line-numbers


【解决方案1】:

我将创建一个复合控件,其中包含堆栈面板控件和左侧的文本块,您将使用它们来处理行号。如果您担心行数和视觉元素过多,则可以在虚拟模式下使用 ListBox。

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

【讨论】:

  • 我不确定我是否喜欢这个想法 - 将列表框文本基线与 RichEdit 基线保持一致可能会有问题(如果他的代码格式化程序允许不同的字体) - 但因为我不有其他选择,+1
  • 我不够聪明,无法完成这项工作。我无法弄清楚 RichTextBox 何时滚动,以便我可以尝试滚动 ListBox 相同的量。而且,由于 RTB 中的行太长,它会自动换行显示,在这种情况下我应该省略 ListBox 行号。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    我不为他们工作...我只知道 Oren 在他的 NHibernate Profiler (NHProf) 中使用了这个产品,而且他似乎在挖掘它。

    【讨论】:

    • 很遗憾,我的雇主不允许我们在解决方案中包含必须获得许可的软件。
    【解决方案4】:

    AvalonEdit 很好,而且它是开源的。我认为它几乎具有 Aqistar 控件的所有功能,例如语法高亮和折叠。易于配置和使用。更多细节可以在here找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多