我有一个 TextPointer tp 指向我想使用 TextRange 突出显示的短语的开头。但是这段代码:
TextRange tr = new TextRange(tp, tp.GetPositionAtOffset(phrase.Length));
Debug.WriteLine("phrase:" + phrase + ", len=" + phrase.Length + " and tr length=" + tr.Text.Length + " and tr.text=" + tr.Text + "<");
产生不正确的输出:
短语:mousse au chocolat, len=18 and tr length=15 and tr.text=mousse au choco<
我使用以下内容检索文档中短语的起始位置:
x = tr.Text.IndexOf(phrase);
在给定字符串短语和文档的 TextRange 的情况下,如何获得子字符串 TextRange?
以下答案显示了用于查找单词的 MSDN 示例代码:
https://stackoverflow.com/a/984836/317033
但是,在我的情况下,它似乎不适用于短语。根据文档: http: //msdn.microsoft.com/en-us/library/ms598662 (v=vs.110).aspx GetPositionAtOffset 偏移量包括“符号”,而不仅仅是可见字符。因此,示例代码也不能正常工作,因为您不能只将 string.IndexOf() 与 GetPositionAtOffset 一起使用。
所以看起来答案将涉及正确考虑需要包含在偏移量中的非字符元素(文档中的符号)。我天真地计算短语跨度的运行次数不起作用。