Como posso adicionar uma quebra de linha ao texto quando ele está sendo definido como um atributo, ou seja:
<TextBlock Text="Stuff on line1 \n Stuff on line2" />
Dividi-lo no formato explodido não é uma opção para minha situação específica. O que eu preciso é de uma maneira de emular o seguinte:
<TextBlock>
<TextBlock.Text>
Stuff on line1 <LineBreak/>
Stuff on line2
</TextBlock.Text>
<TextBlock/>
Pode ser que você possa usar o atributo xml: space = "preserve" para preservar espaços em branco no XAML de origem
fonte
xml:space="preserve"
também manterá os espaços de recuo, que geralmente estão presentes no XAML. Assim, um explícito,<LineBreak />
como sugerido acima, parece ser uma solução mais limpa.Quando você precisar fazer isso em uma string (por exemplo: em seus recursos), precisará usar os códigos de caracteres
xml:space="preserve"
e comercial:Ou novas linhas literais no texto:
Aviso: se você escrever código como o segundo exemplo, você inseriu quer uma nova linha ou um retorno de carro e nova linha, dependendo dos fins de linha o seu sistema operacional e / ou uso editor de texto. Por exemplo, se você escrever isso e o comprometer com o git a partir de um sistema Linux, tudo poderá parecer bem - mas se alguém o clonar no Windows, o git converterá as terminações da sua linha para
\r\n
e dependendo da sua string ... pode quebrar o mundo.Esteja ciente disso quando estiver preservando espaços em branco. Se você escrever algo como isto:
Na verdade, você adicionou quatro quebras de linha, possivelmente quatro retornos de carro e espaço em branco potencialmente invisível ...
fonte
xml:space="preserve"
atributo aoResourceDictionary
também, para não precisar aplicá-lo a todas as cadeias de recursos.<System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String>
(com uma quebra de linha entre Primeira linha e Segunda linha)xml:space="preserve"
Você precisa apenas remover
<TextBlock.Text>
e simplesmente adicionar seu conteúdo da seguinte forma:fonte
Observe que, para fazer isso, você precisa fazê-lo no atributo Texto. Não é possível usar o conteúdo como
fonte
Talvez alguém prefira
com
xmlns:s="clr-namespace:System;assembly=mscorlib"
.fonte
Para aqueles que tentaram todas as respostas a esta pergunta e ainda estão coçando a cabeça por que nenhum deles funciona para você, você pode ter encontrado uma forma do problema em que encontrei.
Minha
TextBlock.Text
propriedade estava dentro de umToolTipService.ToolTip
elemento e estava vinculada a uma propriedade de um objeto cujos dados estavam sendo extraídos de um procedimento armazenado SQL. Agora, os dados dessa propriedade específica no procedimento armazenado estavam sendo extraídos de uma função SQL.Como nada funcionou para mim, desisti da minha pesquisa e criei a classe do conversor abaixo:
Acabei tendo que usar o
Enivornment.NewLine
método da resposta do @ dparker . Instruí o conversor a procurar qualquer representação textual possível de uma nova linha e substituí-la porEnvironment.NewLine
.Isso funcionou!
No entanto, eu ainda estava perplexo com o motivo de nenhum dos outros métodos trabalhar com propriedades de banco de dados.
Deixei um comentário na resposta aceita por @ BobKing :
Ele respondeu com:
Uma lâmpada se apagou!
Entrei na minha função SQL, substitui minhas representações textuais de novas linhas por ...
... removeu o conversor da minha
TextBlock.Text
ligação e, assim mesmo ... funcionou!fonte
Eu achei isso útil, mas encontrei alguns erros ao adicioná-lo a uma tag "Content = ..." no XAML.
Eu tinha várias linhas no conteúdo e, mais tarde, descobri que o conteúdo mantinha espaços em branco, apesar de não ter especificado isso. para contornar isso e fazer com que "ignore" o espaço em branco, eu implementei isso.
espero que isso ajude outra pessoa.
(A saída é tem as três linhas de texto com uma linha vazia entre cada uma.)
fonte
Sei que isso está em questão mais antiga, mas só queria acrescentar que
também funciona se fizer isso através do código.
fonte
não é importante saber, mas o que você especifica entre as tags TextBlock é chamado de conteúdo embutido e entra na propriedade TextBlock.Inlines, que é um InlineCollection e contém itens do tipo Inline. As subclasses de Inline são Run e LineBreak, entre outras. consulte TextBlock.Inlines
fonte
Também não funciona com
Não é grande coisa, só precisava usar
em vez de.
fonte
fonte
Código por trás da solução
fonte