wpf DocumentViewer - получить ITextPointer с помощью GlyphRun и наоборот

Просто интересно, пытался ли кто-нибудь взломать WPF DocumentViewer, чтобы сделать его более полезным. Я уже почти неделю пытался создать более мощный API для этого элемента управления на основе его методов, которые я извлекаю с помощью отражения.

Все знают, как получить выделенный текст из средства просмотра документов через отражение, но моя задача сложнее. Выбранный текст имеет свойства End и Start, которые возвращают ITextPointers. Также у меня есть коллекция GlyphRuns, извлеченных с помощью этот код. И теперь, наконец, я хочу узнать, какой GlyphRun содержит начало выбора.

Поэтому я хочу знать, как преобразовать ITextPointers в GlyphRuns и наоборот. Я понимаю, что у них нет отношений 1:1. Этот контрол с закрытым API и прошлой неделей, проведенной в Reflector, не дает мне спокойно спать. Я надеюсь, что, может быть, кто-то пытался сделать это раньше или видел примеры кода и сможет провести меня через эти джунгли.


person Snowbear    schedule 02.03.2011    source источник
comment
Как вы сказали, нет отношений 1:1. Кроме того, GlyphRun наследуется только от объекта. Тем не менее, он содержит заслуживающие внимания методы. (Я не пробовал ни один из них.) Например, GlyphRun.ComputeAlignmentBox() возвращает Rect, который может содержать данные о местоположении. Я думаю, что это ключ... связывающий данные о местоположении GlyphRun и TextPointer.   -  person Jake Berger    schedule 09.12.2011
comment
не могли бы вы поделиться с нами кодом, чтобы мы тоже могли попробовать   -  person HB MAAM    schedule 28.04.2012
comment
@HBMAAM, За год нашел более-менее рабочее решение, выложу сюда, но это займет некоторое время.   -  person Snowbear    schedule 28.04.2012
comment
@Снежный медведь   -  person Force444    schedule 20.02.2019


Ответы (1)


Я бы порекомендовал вам отказаться от этого подхода. Выполнение большого количества частных размышлений, подобных этому, — это не то, на чем вы должны основывать производственный код, это очень хрупко и совершенно запрещено в некоторых контекстах. Честно говоря, вам лучше найти сторонний элемент управления, который соответствует вашим потребностям, например www.infragistics.com.

Или, если это не вариант, вы, вероятно, можете создать свой собственный элемент управления за то количество времени, которое вам придется потратить на то, чтобы заставить его работать.

person justin.m.chase    schedule 12.05.2012