【问题标题】:GetPositionAtOffset() don't return good positionGetPositionAtOffset() 没有返回好的位置
【发布时间】:2015-09-08 16:34:08
【问题描述】:

我在 WPF (4.0) 中使用 RichTextBox,并使用 GetPositionAtOffset() 方法获取 RichTextBox 内容中两个位置之间的文本范围。

1) 我从 MyRichTextBox.Document.ContentStart 初始化文本指针“位置”:

TextPointer position = RTBEditor.Document.ContentStart;

2) 我像这样从我的 RichTextBox 中获取文本:

var textRun = new TextRange(RTBEditor.Document.ContentStart, RTBEditor.Document.ContentEnd).Text;

3) 使用 Regex,我在 textRun 中找到我想要的字符串,并获取开始的索引和结束的索引(我在“/*”和“*/”之间搜索文本):

Regex regex = new Regex(@"/\*([^\*/])*\*/");
var match = regex.Match(textRun);
TextPointer start = position.GetPositionAtOffset(matchBegin.Index, LogicalDirection.Forward);
TextPointer end = position.GetPositionAtOffset(matchBegin.Index + matchBegin.Length, LogicalDirection.Backward);

但是,当我在文本范围中使用这些指针并对其中的文本进行着色时,在我的 RichTextBox 中着色的不是正则表达式(带有商品索引)中匹配的好文本。

为什么 GetPositionAtOffset() 方法没有给出指定索引处的位置?是这个方法的问题还是其他地方的问题?

谢谢你的回复,我的发展停滞了。

【问题讨论】:

  • 删除RichTextBox 并使用适当的代码编辑器,例如AvalonEdit
  • 感谢您的回复。我必须做我自己的代码编辑器(带有richtextbox),我不能使用另一个。如果有人可以向我解释为什么 GetPositionAtOffset() 不起作用并且不给我良好的开始和结束位置,那对我来说很好,我可以继续。

标签: regex wpf richtextbox textrange


【解决方案1】:

据此,https://msdn.microsoft.com/en-us/library/ms598662%28v=vs.110%29.aspx

GetPositionAtOffset 将一个 TextPointer 返回到由当前 TextPointer 开头的指定偏移量(以符号表示)所指示的位置。

以下任何一项都被视为符号:

  • TextElement 元素的开始或结束标记。

  • 包含在 InlineUIContainer 或 BlockUIContainer 中的 UIElement 元素。请注意,这样的 UIElement 始终只计为一个符号; UIElement 包含的任何其他内容或元素都不算作符号。

  • 文本 Run 元素内的 16 位 Unicode 字符。

【讨论】:

    【解决方案2】:

    很抱歉打扰您,问题出在其他地方。

    我使用 AppendText() 方法初始化 RichTextBox 的文本,而不是使用我在块中添加的段落。所以现在它工作正常!

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 2021-08-16
      • 2012-01-22
      相关资源
      最近更新 更多