c# wpf newline textblock

c# - Cómo poner una nueva línea en un control wpf TextBlock?



newline (7)

Aunque esta es una vieja pregunta, acabo de encontrar el problema y lo resolví de manera diferente a las respuestas dadas. Tal vez podría ser útil para otros.

Noté que a pesar de que mis archivos XML se veían así:

<tag> <subTag>content with newline./r/nto display</subTag> </tag>

Cuando se leyó en mi código C #, la cadena tenía barras diagonales inversas dobles.

//r//n

Para solucionar esto, escribí un ValueConverter para quitar la barra invertida adicional.

public class XmlStringConverter : IValueConverter { public object Convert( object value, Type targetType, object parameter, CultureInfo culture) { string valueAsString = value as string; if (string.IsNullOrEmpty(valueAsString)) { return value; } valueAsString = valueAsString.Replace("//r//n", "/r/n"); return valueAsString; } public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }

Estoy obteniendo texto de un archivo XML y me gustaría insertar algunas líneas nuevas que son interpretadas por el bloque textblock como nuevas líneas.

He intentado:

<data>Foo bar baz /n baz bar</data>

Pero los datos aún se muestran sin la nueva línea. .Text el contenido de <data> través de la propiedad .Text través de C #.

¿Qué debo poner en el XML para que represente la nueva línea en la GUI?

He intentado algo así como configurar manualmente el texto en el XAML:

<TextBlock Margin="0 15 0 0" Width="600"> There &#10; is a new line. </TextBlock>

Y aunque el carácter codificado no aparece en la GUI, tampoco me da una nueva línea.


Para completar: también puedes hacer esto:

<TextBlock Text="Line1&#x0a;Line 2"/>


Puedes intentar poner una nueva línea en los datos:

<data>Foo bar baz baz bar</data>

Si eso no funciona, es posible que deba analizar la cadena manualmente.

Si necesita XAML directo, es fácil, por cierto:

<TextBlock> Lorem <LineBreak/> Ipsum </TextBlock>


Si todo lo demás falla, también puede usar

"My text needs a line break here" + System.Environment.NewLine + " This should be a new line"


También puedes usar encuadernación

<TextBlock Text="{Binding MyText}"/>

Y configura MyText así:

Public string MyText { get{return string.Format("My Text /n Your Text");} }


debes usar

< SomeObject xml:space="preserve" > once upon a time ... this line will be below the first one < /SomeObject>

O si lo prefiere:

<SomeObject xml:space="preserve" /> once upon a time... &#10; this line below < / SomeObject>

cuidado: si ambos usan & 10 Y pasa a la siguiente línea en su texto, tendrá DOS líneas vacías.

aquí para más detalles: http://msdn.microsoft.com/en-us/library/ms788746.aspx


<TextBlock Margin="4" TextWrapping="Wrap" FontFamily="Verdana" FontSize="12"> <Run TextDecorations="StrikeThrough"> Run cannot contain inline</Run> <Span FontSize="16"> Span can contain Run or Span or whatever <LineBreak /> <Bold FontSize="22" FontFamily="Times New Roman" >Bold can contains <Italic>Italic</Italic></Bold></Span> </TextBlock>