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.


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


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>

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


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>

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


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>

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


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.


2

Esto también funciona bien:

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

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.


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();
    }
}

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


0

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

$"first line {Environment.NewLine} second line"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.