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
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
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... 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>