WPF Textblock, перенос строки в атрибуте Text - PullRequest
81 голосов
/ 08 мая 2009

Есть ли способ сделать \n разрыв строки в TextBlock?

<TextBlock Text="line1\nLine2" />

Или есть лучший способ форсировать разрыв средней линии внутри атрибута Text?

<LineBreak />

Это не работает для меня, оно должно быть значением атрибута Text, потому что текстовая строка устанавливается из внешнего источника.

Я знаком с LineBreak, но это не тот ответ, который я ищу.

Ответы [ 13 ]

115 голосов
/ 08 мая 2009

Попробуйте это:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>
109 голосов
/ 28 октября 2009

Я знаю, что это воскрешает старый вопрос, но у меня была та же проблема. Решение для меня заключалось в том, чтобы использовать строки в кодировке HTML (&amp;#10;).

Line1&amp;#10;Line2

выглядит как

Line1
Line2

Чтобы узнать больше о символах в кодировке HTML, ознакомьтесь с w3schools

10 голосов
/ 09 января 2013

Самый простой способ это

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

Итак, вы просто пишете код XAML, и <LineBreak /> имеет точно такое же значение, как
в HTML или "\ n" в C #.

7 голосов
/ 08 мая 2009
5 голосов
/ 08 мая 2009

Как насчет разбиения строки на два тега?

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>
3 голосов
/ 30 мая 2014

не будет работать, если он находится внутри коллекции, такой как Grid или StackPanel. В таких случаях следующее будет работать, как показано:

LineBreak inside a collection

3 голосов
/ 10 апреля 2012

Правильный способ его использования может быть следующим:

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>
2 голосов
/ 11 марта 2013

Если вы связываете TextBlock's Text, ни один из других ответов не сработает. Просто добавьте '\ n' к обязательному тексту в том месте, где вы хотите разбить.

1 голос
/ 26 марта 2014

Я опоздал на вечеринку, но .. это более или менее то, как я это сделал (учтите, что мои ItemSources - простые строки, не отформатированные, и мне не нужно ничего конвертировать)

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();
    }
}
1 голос
/ 04 декабря 2012

просто используйте элемент управления AccessText. Вы можете использовать его как метку, и у вас есть свойство TextWrapping = "WrapWithOverflow"

например.

У меня так и работает нормально. Кроме того, у вас нет проблем с динамическим изменением текста.

...