¿Cómo puedo agregar un salto de línea al texto cuando se establece como un atributo, es decir:
<TextBlock Text="Stuff on line1 \n Stuff on line2" />
Desglosarlo en el formato explotado no es una opción para mi situación particular. Lo que necesito es alguna forma de emular lo siguiente:
<TextBlock>
<TextBlock.Text>
Stuff on line1 <LineBreak/>
Stuff on line2
</TextBlock.Text>
<TextBlock/>
Puede ser que pueda usar el atributo xml: space = "preserve" para preservar espacios en blanco en la fuente XAML
fuente
xml:space="preserve"
también mantendrá los espacios de sangría, que generalmente están presentes en XAML. Por lo tanto, lo explícito<LineBreak />
como se sugirió anteriormente parece ser una solución más limpia.Cuando necesite hacerlo en una cadena (p. Ej .: en sus recursos), debe usar los códigos de caracteres
xml:space="preserve"
y signos de ampersand:O nuevas líneas literales en el texto:
Advertencia: si se escribe un código como el segundo ejemplo, se ha insertado ya sea un salto de línea, o un retorno de carro y salto de línea, en función de los finales de línea de su sistema operativo y / o uso editor de texto. Por ejemplo, si escribe eso y lo compromete a git desde un sistema Linux, todo puede parecer bien, pero si alguien lo clona en Windows, git convertirá sus terminaciones de línea
\r\n
y dependiendo de para qué es su cadena ... podría romper el mundoSolo tenga en cuenta eso cuando esté preservando el espacio en blanco. Si escribes algo como esto:
De hecho, ha agregado cuatro saltos de línea, posiblemente cuatro retornos de carro, y un espacio en blanco potencialmente invisible que es invisible ...
fuente
xml:space="preserve"
atributo alResourceDictionary
, para que no necesite aplicarlo a cada cadena de recursos.<System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String>
(con un salto de línea entre la primera línea y la segunda línea)xml:space="preserve"
Solo necesita eliminar
<TextBlock.Text>
y simplemente agregar su contenido de la siguiente manera:fuente
Tenga en cuenta que para hacer esto debe hacerlo en el atributo Texto, no puede usar el contenido como
fuente
Quizás alguien prefiera
con
xmlns:s="clr-namespace:System;assembly=mscorlib"
.fuente
Para aquellos que han intentado todas las respuestas a esta pregunta y todavía se están rascando la cabeza de por qué ninguno de ellos funciona para usted, es posible que haya encontrado una forma del problema con el que me encontré.
Mi
TextBlock.Text
propiedad estaba dentro de unToolTipService.ToolTip
elemento y estaba enlazada a una propiedad de un objeto cuyos datos se extraían de un procedimiento almacenado de SQL. Ahora los datos de esta propiedad en particular dentro del procedimiento almacenado se extraían de una función SQL.Como nada me había funcionado, dejé mi búsqueda y creé la siguiente clase de convertidor:
Terminé teniendo que usar el
Enivornment.NewLine
método de la respuesta de @ dparker . Le indiqué al convertidor que buscara cualquier representación textual posible de una nueva línea y la reemplazara porEnvironment.NewLine
.Esto funcionó!
Sin embargo, todavía estaba perplejo sobre por qué ninguno de los otros métodos funcionaba con propiedades enlazadas a datos.
Dejé un comentario sobre la respuesta aceptada de @ BobKing :
Él respondió con:
¡Se encendió una bombilla!
Ingresé a mi función SQL, reemplacé mis representaciones textuales de nuevas líneas con ...
... eliminé el convertidor de mi
TextBlock.Text
enlace, y así como así ... ¡funcionó!fuente
He encontrado esto útil, pero encontré algunos errores al agregarlo a una etiqueta "Contenido = ..." en XAML.
Tenía varias líneas en el contenido, y luego descubrí que el contenido mantenía espacios en blanco a pesar de que no especifiqué eso. para evitar eso y hacer que "ignore" el espacio en blanco, implementé algo como esto.
Espero que esto ayude a alguien más.
(La salida tiene las tres líneas de texto con una línea vacía entre cada una).
fuente
Me doy cuenta de que esto es una pregunta anterior, pero solo quería agregar eso
También funciona si se hace esto a través del código.
fuente
no es que sea importante saberlo, pero lo que especifica entre las etiquetas TextBlock se llama contenido en línea y entra en la propiedad TextBlock.Inlines, que es una colección InlineCollection y contiene elementos de tipo Inline. Las subclases de Inline son Run y LineBreak, entre otras. ver TextBlock.Inlines
fuente
Tampoco funciona con
No es gran cosa, solo necesito usar
en lugar.
fuente
fuente
Código detrás de la solución
fuente