2009-02-19 14 views
15

Estoy creando un editor de texto para un idioma específico del dominio. Estoy usando el WPF RichTextBox como control básico. No sé cómo incluir con gracia la numeración de líneas. ¿Alguien sabe de algún ejemplo?WPF RichTextBox para crear el editor con los números de línea

+0

No era lo suficientemente inteligente como para hacer que funcione. No he podido averiguar cuándo se está desplazando RichTextBox, así que puedo intentar desplazar el ListBox la misma cantidad. Y, como las líneas se alargan demasiado en el RTB, automáticamente envuelve su pantalla, y debería omitir los números de línea ListBox en ese caso. –

Respuesta

3

Crearía un control compuesto, con un panel de control de pila y bloques de texto a la izquierda que usaría para manejar la numeración de líneas. Si le preocupa el número de líneas y tiene demasiados elementos visuales, entonces podría usar un ListBox en modo virtual.

Tendría que conectarse a los diversos eventos en el RichTextBox para saber cuándo actualizar el ListBox, así como calcular el alto de cada línea, pero eso debería ser factible con el FlowDocument adjunto al RichTextBox.

+0

No estoy seguro si me gusta esta idea: mantener las líneas de base de texto del cuadro de lista en línea con las líneas de base de RichEdit podría ser problemático (definitivamente si su formateador de código permite diferentes fuentes), pero como no tengo una alternativa, +1 –

+0

No fui lo suficientemente inteligente como para hacer que eso funcione. No he podido averiguar cuándo se está desplazando RichTextBox, así que puedo intentar desplazar el ListBox la misma cantidad. Y, como las líneas se alargan demasiado en el RTB, automáticamente envuelve su pantalla, y debería omitir los números de línea ListBox en ese caso. –

3

RichText admite "protected" - uneditable - span. Puede volcar sus números de línea a medida que el texto protegido se expande como parte de la secuencia RTF (cuando realiza el formateo).

En Win Forms, puede usar RichTextBox.SelectionProtected Property. WPF debe tener algo similar.

De esta manera, todas las líneas base serán correctas y no tendrá que pensar ni programar para que el editor se comporte correctamente. El texto editable será editable y los números de línea no serán editables.

El único inconveniente es que tiene que volver a enviar la secuencia RTF después de cada edición. Pero imagino que ya estabas haciendo esto para proporcionar el formato de parseo/diagnóstico de error/lo que sea.

2

¿Qué le parece usar el control WPF de texto enriquecido de AqiStar? AqiStar.TextBox

No trabajo para ellos ... Solo sé que Oren está usando este producto en su NHibernate Profiler (NHProf) y parece que lo está cavando.

+0

Desafortunadamente, mi empleador no nos permite incluir el software que tenemos que licenciar en nuestra solución. –

7

AvalonEdit es bueno, y es de código abierto. Creo que tiene casi todas las características del control Aqistar, como resaltado de sintaxis y plegado. Facilidad de configuración y uso. Se pueden encontrar más detalles here. enter image description here

Cuestiones relacionadas