it-swarm-pt.tech

Como colocar uma nova linha em um controle TextBlock wpf?

Estou buscando texto de um arquivo XML e gostaria de inserir algumas novas linhas que são interpretadas pela renderização textblock como novas linhas.

Eu tentei:

<data>Foo bar baz \n baz bar</data>

Mas os dados ainda são exibidos sem a nova linha. Eu defino o conteúdo de <data> através da propriedade .Text via C #.

O que preciso colocar no XML para poder renderizar a nova linha na GUI?

Eu tentei algo parecido com isso, definindo manualmente o texto no XAML:

<TextBlock Margin="0 15 0 0" Width="600">
There &#10;
is a new line.
</TextBlock>

E enquanto o caractere codificado não aparece na GUI, ele também não me dá uma nova linha.

84
Only Bolivian Here

Você pode tentar colocar uma nova linha nos dados:

<data>Foo bar baz 
 baz bar</data>

Se isso não funcionar, talvez seja necessário analisar a string manualmente.

Se você precisar de XAML direto, é fácil:

<TextBlock>
    Lorem <LineBreak/>
    Ipsum
</TextBlock>
154
H.B.

Para completar: Você também pode fazer isso:

 <TextBlock Text="Line1&#x0a;Line 2"/>
44
Ketobomb

você deve usar

 < SomeObject xml:space="preserve" > once upon a time ...
      this line will be below the first one < /SomeObject>

Ou se você preferir:

 <SomeObject xml:space="preserve" />  once upon a time... &#10; this line below < / SomeObject>

cuidado: se ambos usarem & 10 E você for para a próxima linha no seu texto, você terá DUAS linhas vazias.

aqui para detalhes: http://msdn.Microsoft.com/en-us/library/ms788746.aspx

18
GameAlchemist

Você também pode usar ligação

<TextBlock Text="{Binding MyText}"/>

E defina MyText assim:

Public string MyText
{
    get{return string.Format("My Text \n Your Text");}
}
18
Gordon

Embora essa seja uma pergunta antiga, acabei de encontrar o problema e resolvi de maneira diferente das respostas dadas. Talvez isso possa ser útil para os outros.

Percebi que, embora meus arquivos XML parecessem:

<tag>
 <subTag>content with newline.\r\nto display</subTag>
</tag>

Quando foi lida no meu código C #, a cadeia tinha barras duplas invertidas.

\\r\\n

Para corrigir isso, escrevi um ValueConverter para remover a barra invertida extra.

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

Se tudo mais falhar, você também pode usar

"My text needs a line break here" + System.Environment.NewLine + " This should be a new line"
9
Adrian
<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>
8
alkk

Usar System.Environment.NewLine é a única solução que funcionou para mim. Quando eu tentei\r\n, ele apenas repetiu o real\r\n na caixa de texto.

0
Order23