У меня есть TextPointer tp, указывающий на начало фразы, которую я хотел бы выделить с помощью TextRange. Тем не менее этот код:Выделение фразы в FlowDocument
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 + "<");
Дает неправильный результат:
фраза: шоколадный мусс, LEN = 18 и длина тр = 15 и tr.text = мусс Chocó <
Я использовал Ниже получить начальное положение фразы в моем документе:
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.
Таким образом, похоже, что ответ будет включать правильный учет несимвольных элементов (символов в документации), которые необходимо включить в смещение. Мой наивный подсчет количества прогонов пробелов фразы не работает.
Фраза распространяется на 3 пробега, если какой-то разрыв между пробегом занимает 1 от длины. * shrug * – Mark