我在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()方法没有给出指定索引处的位置?这个方法是问题还是在其他地方?
感谢回复,我在开发过程中停止了。
答案 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字符。