2010-02-21 20 views
5

La función de envoltura de texto en Silverlight se describe here. Sin embargo, estoy tratando de averiguar los detalles de su algoritmo de salto de línea.¿Cuáles son los caracteres divididos en TextWrapping de Silverlight?

Obviamente, un espacio hará que el texto se rompa (o se divida), lo que alentará al texto a pasar a la siguiente línea. Y a través de ensayo y error que he encontrado que estos personajes también causan una división:

  • \ t (ficha)
  • -
  • !
  • ?

Pero dudo que esta sea la lista completa. ¿Alguien ha encontrado la lista completa de los caracteres divididos (incluido Unicode)? ¿O tienes alguna sugerencia inteligente para resolver esto que aún no he pensado? La prueba y el error pueden ser lentos.

Respuesta

4

TextWrapping = Wrap intentará cumplir con el Estándar estándar Anexo Unicode # 14 que Johannes ya ha vinculado.

Sin embargo, si utiliza este enfoque, el texto aún no se ajusta al ancho (debido a un ancho muy limitado o palabras largas), entonces dividirá la palabra en dos líneas, no hincinará ni hará nada inteligente. Tan pronto como colocar una letra sobrepasa el ancho y si no puede encontrar algo en la línea que le permita usar el algoritmo estándar, continuará la palabra en la siguiente línea.

1

Escribí una pequeña aplicación de prueba para ayudarme a determinar cuál de estos caracteres causa una división. Todavía es un proceso manual, pero al menos es más fácil de ver ahora. El guión comenzó a código ASCII 1 y he ido hasta 3000.

Esto provoca una escisión después el personaje:

Private arrSplitAfter() As Char = {CChar(" "), CChar("-"), ChrW(9), CChar("!"), CChar("?"), CChar("%"), CChar(")"), CChar("/"), CChar("]"), CChar("|"), CChar("}"), ChrW(133), ChrW(162), ChrW(176), ChrW(1418), ChrW(1478), ChrW(1547), ChrW(1548), ChrW(1563), ChrW(1566), ChrW(1567), ChrW(1642), ChrW(1748), ChrW(2404), ChrW(2405)} 

Y estos causan una división antes el personaje:

Private arrSplitBefore() As Char = {CChar("$"), CChar("("), CChar("+"), CChar("["), CChar("\"), CChar("{"), ChrW(163), ChrW(164), ChrW(165), ChrW(177), ChrW(180), ChrW(712), ChrW(716), ChrW(2546), ChrW(2547), ChrW(2801)} 

Obviamente hay muchos más personajes para llevar. Desafortunadamente me he encontrado con un problema. Intentaba escribir un código de resaltado súper eficiente que funcionara en texto envuelto en palabras. Hasta que no pueda encontrar una solución para mis problemas de realce, no me molestaré en continuar.

Cuestiones relacionadas