GetPositionAtOffset()不会返回好位置

时间:2015-06-12 14:33:23

标签: regex wpf richtextbox textrange

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

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

TextPointer position = RTBEditor.Document.ContentStart;

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

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

3)使用正则表达式,我在textRun中找到了我想要的字符串,并获得了开始索引和结束索引(我在#34; / *&#34之间搜索文本;以及" * /&#34):

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()方法没有给出指定索引处的位置?这个方法是问题还是在其他地方?

感谢回复,我在开发过程中停止了。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

据此,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字符。