2011-03-02 7 views
35

Solo me pregunta si alguien ha intentado hackear WPF DocumentViewer para hacerlo más útil. He pasado casi una semana intentando crear una API más poderosa para este control en función de los métodos que extraigo utilizando la reflexión.wpf DocumentViewer: obtenga ITextPointer por GlyphRun y ​​viceversa

Todo el mundo sabe cómo obtener el texto seleccionado del visor de documentos a través de la reflexión, pero mi tarea es más complicada. Selected text tiene End y Start propiedades que devuelven ITextPointers. También tengo una colección de GlyphRuns extraída usando this code. Y ahora, finalmente, quiero saber qué GlyphRun contiene inicio de selección.

Así que quiero saber cómo convertir ITextPointers en GlyphRuns y viceversa. Entiendo que no tienen una relación 1: 1. Este control con API cerrada y la semana pasada en Reflector no me deja dormir bien. Espero que alguien haya intentado hacerlo antes o haya visto ejemplos de código y pueda guiarme a través de estas junglas.

+2

Como dijiste, no hay relación 1: 1. Además, GlyphRun solo hereda de un objeto. Sin embargo, contiene métodos notables. (No he probado ninguno de ellos.) Por ejemplo, GlyphRun.ComputeAlignmentBox() devuelve un Rect, que puede contener datos de ubicación. Creo que esa es la clave ... relacionando los datos de ubicación de GlyphRun y ​​TextPointer. –

+1

puede compartir un código con nosotros para que podamos probar algunos intentos también –

+2

@HBMAAM, durante el año en que encontré una solución más o menos funcional, la voy a publicar aquí, pero llevará algo de tiempo. – Snowbear

Respuesta

1

Yo recomendaría que abandone este enfoque. Hacer muchos reflejos privados como este no es algo sobre lo que se deba basar el código de producción, es muy frágil y francamente prohibido en algunos contextos. Francamente, es mejor que encuentres un control de terceros que se adapte a tus necesidades, como www.infragistics.com

O, si no es una opción, probablemente puedas crear tu propio control en la cantidad de tiempo que necesitarás para obtener este trabajar.

Cuestiones relacionadas