WPF Textblock, salto de línea en el atributo Text

96

¿Hay alguna forma de \nhacer un salto de línea en un TextBlock?

<TextBlock Text="line1\nLine2" />

¿O hay una mejor manera de forzar una ruptura de la línea media, dentro del Textatributo?

<LineBreak />

Esto no funciona para mí, debe ser el valor del Textatributo, porque la cadena de texto se establece desde una fuente externa.

Estoy familiarizado, LineBreakpero no es la respuesta que estoy buscando.

ScottCate
fuente
2
en xaml tienes que usar caracteres de control <TextBlock Name = "txtBlock" Text = "Line1 & # 10; Line2" />, si quieres usar el carácter \ n, solo funciona desde el código detrás de txtBlock.Text = "line1 \ nline2 ";
JJ_Coder4Hire
& # 10; funciona bien en xaml. ¡Gracias JJ_Coder4Hire!
Kay Lee

Respuestas:

116

Sé que esto está resolviendo una vieja pregunta, pero tuve el mismo problema. La solución para mí fue utilizar saltos de línea codificados en HTML ( &amp;#10;).

Line1&amp;#10;Line2

Parece

Línea1
Línea2

Para obtener más caracteres codificados en HTML, consulte w3schools

Noaki
fuente
19
@Knasterbax si el texto se especifica como el contenido entre <TextBlock>y </TextBlock>luego sí, lo necesitará <LineBreak/>. &#10;trabaja dentro del Textatributo:<TextBlock Text="..." />
Roman Starkov
6
"& # 10;" trabajó para mi. No necesitaba el "& amp;" como se mencionó sin embargo. Este método también funcionará cuando se establezca el texto de esta manera: <Setter Property = "Text" Value = "Line 1 & # 10; & # 10; Line 2" />
EdwardM
126

Prueba esto:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>
Paul Alexander
fuente
1
No he probado esto directamente, pero en la parte superior de mi cabeza, podría probar xml: space = "preserve" y luego incrustar el salto de línea en la propiedad Text directamente.
Paul Alexander
3
La capitalización importa. Es <LineBreak />.
M. Dudley
10

La forma mas facil es

<TextBlock> blabla <LineBreak /> coucou <LineBreak /> coucou 2 </TextBlock>

Así que simplemente escribe código XAML, y <LineBreak />tiene exactamente el mismo significado que
en HTML o "\ n" en C #.

Stephane Halimi
fuente
1
Respuesta duplicada a la de Paul Alexander.
vapcguy
5

¿Qué tal dividir la línea en dos etiquetas?

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>
Cameron MacFarland
fuente
5

<LineBreak /> no funcionará si está dentro de una colección como Grid o StackPanel. En tales casos, lo siguiente funcionaría como se muestra:

LineBreak dentro de una colección

usuario2063329
fuente
Intenté esto como el contenido de un RadioButton. Todo parecía funcionar bien hasta que ejecuté el programa en Windows 7. En Windows 7, el botón estaba centrado verticalmente entre las dos líneas. Windows 10 alinea el botón en la parte superior de forma predeterminada. Si bien Windows 10 honraría la propiedad VerticalContentAlignment, Windows 7 la ignora. Tuve que usar la solución LineBreak.
mrfelis
5

La forma correcta de usarlo puede ser la siguiente:

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>
radu florescu
fuente
3
  <HyperlinkButton 
        Content="Apply and restart this pplication!&#10;&#13;Note that modifying these settings requires the application to be restarted."   />

CRLF forma simple = !&#10;&#13;

!&#10;&#13; - Trabaja en todos los controles wpf, xaml, silverlight como TextBlock, HyperlinkText y más

usuario1551704
fuente
1
(vaya a corregir su otra respuesta y
3

Si está vinculando el texto de TextBlock, ninguna de las otras respuestas funciona. Simplemente agregue '\ n' al texto de enlace en el lugar donde desea romper.

hombre nuevo
fuente
2

Esto también funciona bien:

<TextBlock>
    <Run Text="My nice text"/>
    <LineBreak/>
    <LineBreak/>
    <Run Text="After some linebreaks, I'm back!"/>
</TextBlock>
Christoffer Eriksson
fuente
1

simplemente use el control AccessText. puedes usarlo como una etiqueta y tienes la propiedad TextWrapping = "WrapWithOverflow"

p.ej.

El mío es así y está funcionando bien. Además, no tiene ningún problema para cambiar el texto dinámicamente.

MelloG
fuente
1

Llego tarde a la fiesta, pero ... así es más o menos cómo lo hice (tenga en cuenta que mis ItemSources son cadenas simples, no formateadas, y no necesitaba 'convertirBack' nada)

public class SpaceToLineBreakConverter : IValueConverter
{   
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {            
        return (!String.IsNullOrEmpty(value as string)) 
        ? new Regex(@"\s").Replace(value as string, "\n") 
        : value;            
    }

    public object ConvertBack(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Dan
fuente
0

Tenía un problema similar y quería vincular una cadena de marcado xaml a un TextBlock. Esencialmente almacenar el marcado declarativo dentro de un TextBlock en una cadena para su uso posterior.

Así es como lo hice : subclasé el TextBlock para hacer el InlineCollection enlazable y escribí un Convertidor entre la cadena y un InlineCollection (o en realidad una lista genérica de Inline).

Jodrell
fuente
0

esto &amp;#10;no funcionó para mí, cuando usé la encuadernación. Pero esto funciona:

$"first line {Environment.NewLine} second line"
Blechdose
fuente