WPF Textblock, quebra de linha no atributo Text

94

Existe uma maneira de \nfazer uma quebra de linha em um TextBlock?

<TextBlock Text="line1\nLine2" />

Ou existe uma maneira melhor de forçar uma quebra de linha do meio, dentro do Textatributo?

<LineBreak />

Isso não funciona para mim, precisa ser o valor do Textatributo, porque a string de texto está sendo definida de uma fonte externa.

Estou familiarizado, LineBreakmas não é a resposta que procuro.

ScottCate
fonte
2
no xaml, você deve usar caracteres de controle <TextBlock Name = "txtBlock" Text = "Line1 & # 10; Line2" />, se quiser usar o caractere \ n, ele só funciona a partir do código atrás de txtBlock.Text = "line1 \ nline2 ";
JJ_Coder4Hire
& # 10; funciona bem no xaml. Obrigado JJ_Coder4Hire!
Kay Lee

Respostas:

114

Sei que isso está ressuscitando uma velha questão, mas tive o mesmo problema. A solução para mim foi usar feeds de linha codificados em HTML ( &amp;#10;).

Line1&amp;#10;Line2

Parece

Linha1
Linha2

Para mais caracteres codificados em HTML, verifique w3schools

Noaki
fonte
18
@Knasterbax se o texto for especificado como o conteúdo entre <TextBlock>e </TextBlock>então sim, você precisará <LineBreak/>. &#10;funciona dentro do Textatributo:<TextBlock Text="..." />
Roman Starkov
6
"& # 10;" trabalhou para mim. Eu não precisava do "& amp;" como mencionado embora. Este método também funcionará ao definir o texto da seguinte forma: <Setter Property = "Text" Value = "Line 1 & # 10; & # 10; Line 2" />
EdwardM
123

Experimente isto:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>
Paul Alexander
fonte
1
Ainda não tentei isso diretamente, mas de início você poderia tentar xml: space = "preserve" e, em seguida, incorporar a quebra de linha na propriedade Text diretamente.
Paul Alexander
3
Problemas de capitalização. É <LineBreak />.
M. Dudley
10

A maneira mais fácil é

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

Então, você apenas escreve o código XAML e <LineBreak />tem exatamente o mesmo significado
em HTML ou "\ n" em C #.

Stephane Halimi
fonte
1
Resposta duplicada para Paul Alexander.
vapcguy
5

Que tal quebrar a linha em duas tags?

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

<LineBreak /> não funcionará se estiver dentro de uma coleção como Grid ou StackPanel. Nesses casos, o seguinte funcionaria conforme mostrado:

LineBreak dentro de uma coleção

user2063329
fonte
Tentei isso como o conteúdo de um RadioButton. Tudo parecia funcionar bem até que executei o programa no Windows 7. No Windows 7, o botão estava centralizado verticalmente entre as duas linhas. O Windows 10 alinha o botão com a parte superior superior por padrão. Embora o Windows 10 honre a propriedade VerticalContentAlignment, o Windows 7 a ignora. Tive que usar a solução LineBreak.
mrfelis
5

A maneira correta de usá-lo pode ser a seguinte:

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>
Radu Floresu
fonte
3

Se você está vinculando TextBlock's Text, nenhuma das outras respostas funciona. Basta adicionar '\ n' ao texto de vinculação onde deseja interromper.

novo homem
fonte
2
  <HyperlinkButton 
        Content="Apply and restart this pplication!&#10;&#13;Note that modifying these settings requires the application to be restarted."   />

CRLF maneira simples = !&#10;&#13;

!&#10;&#13; - Trabalhe em todos os controles wpf, xaml, silverlight como TextBlock, HyperlinkText e muito mais

user1551704
fonte
1
(corrija sua outra resposta e
2

Isso também funciona bem:

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

basta usar o controle AccessText. você pode usá-lo como um rótulo e tem a propriedade TextWrapping = "WrapWithOverflow"

por exemplo.

O meu é assim e está funcionando bem. Além disso, você não tem problemas em alterar o texto dinamicamente.

MelloG
fonte
1

Estou atrasado para a festa, mas ... foi mais ou menos assim que eu fiz, (lembre-se de que meus ItemSources são strings simples, não formatadas e eu não precisei 'converterBack' 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
fonte
0

Eu estava tendo um problema semelhante e queria vincular uma string de marcação xaml a um TextBlock. Armazenar essencialmente a marcação declarativa dentro de um TextBlock em uma string para uso posterior.

Foi assim que fiz : criei uma subclasse do TextBlock para tornar o InlineCollection vinculável e escrevi um Converter entre a string e um InlineCollection (ou, na verdade, uma lista genérica de Inlines.)

Jodrell
fonte
0

isso &amp;#10;não funcionou para mim, quando usei encadernação. Mas isso funciona:

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