2

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

感谢您的回复,我的发展停止了。

4

2 回答 2

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 字符。

于 2015-09-08T06:20:08.917 回答
0

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

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

于 2015-06-15T07:26:43.790 回答