GetPositionAtOffset() 不 return 好位置

GetPositionAtOffset() don't return good position

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

1) 我从 MyRichTextBox.Document.ContentStart 初始化文本指针 "position" :

TextPointer position = RTBEditor.Document.ContentStart;

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

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

3) 使用正则表达式,我在 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() 方法不给出指定索引处的位置?是这个方法的问题还是其他地方?

谢谢回复,我的开发中止了。

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

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

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

GetPositionAtOffset returns 指向指定 偏移量指示的位置的 TextPointer,以符号表示, 从当前 TextPointer 的开始。

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

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

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

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