WPF Textblock, розрив рядка в атрибуті Text


96

Чи є спосіб \nзробити розрив рядка в TextBlock?

<TextBlock Text="line1\nLine2" />

Або є кращий спосіб примусити розрив середньої лінії всередині Textатрибута?

<LineBreak />

Це не працює для мене, це має бути значення Textатрибута, оскільки текстовий рядок встановлюється із зовнішнього джерела.

Я знайомий, LineBreakале це не відповідь, яку я шукаю.


2
у xaml ви повинні використовувати контрольні символи <TextBlock Name = "txtBlock" Text = "Line1 & # 10; Line2" />, якщо ви хочете використовувати символ \ n, він працює лише з коду поза txtBlock.Text = "line1 \ nline2 ";
JJ_Coder4Hire

& # 10; чудово працює в xaml. Дякуємо JJ_Coder4Hire!
Кей Лі,

Відповіді:


116

Я знаю, що це відновлення старого питання, але в мене була та сама проблема. Рішенням для мене стало використання стрічкових каналів, закодованих HTML ( &amp;#10;).

Line1&amp;#10;Line2

Виглядає як

Рядок1
Рядок2

Щоб отримати більше символів, закодованих HTML, перегляньте w3schools


19
@Knasterbax, якщо текст вказаний як вміст між, <TextBlock>а </TextBlock>потім так, вам знадобиться <LineBreak/>. &#10;працює всередині Textатрибута:<TextBlock Text="..." />
Роман Старков

6
"& # 10;" працював у мене. Мені не потрібно було "& amp;" як уже згадувалося. Цей метод також буде працювати при встановленні тексту таким чином: <Властивість сетера = "Текст" Значення = "Рядок 1 & # 10; & # 10; Рядок 2" />
EdwardM

126

Спробуйте це:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>

1
Я ще не пробував цього безпосередньо, але з кінця моєї голови ви можете спробувати xml: space = "зберегти", а потім безпосередньо вставити розрив рядка у властивість Text.
Пол Олександр

3
Великі літери мають значення. Це <LineBreak />.
М. Дадлі,

10

Найпростіший спосіб

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

Отже, ви просто пишете код XAML, і значення <LineBreak />має абсолютно те саме значення, що і
в HTML, або "\ n" у C #.


1
Дублікат відповіді Пола Олександра.
vapcguy

7

3
Скотт, я не розумію твого коментаря.
jcollum

1
Проблема в тому, що <LineBreak /> не працює в Windows XP. Це також може мати щось спільне із встановленою версією .NET. Не існує винятків і помилок, крім візуальних елементів, відображаються неправильно.
Чарльз


5

<LineBreak /> не працюватиме, якщо він знаходиться у колекції, такі як Grid або StackPanel. У таких випадках працює наступне, як показано:

LineBreak всередині колекції


Я спробував це як вміст для RadioButton. Здавалося, все працювало нормально, поки я не запустив програму на Windows 7. У Windows 7 кнопка розташовувалася вертикально по центру між двома рядками. Windows 10 за замовчуванням вирівнює кнопку вгорі вгорі. Хоча Windows 10 буде дотримуватися властивості VerticalContentAlignment, Windows 7 ігнорує це. Мені довелося скористатися рішенням LineBreak.
mrfelis

5

Правильним способом його використання може бути наступний:

<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 простий спосіб = !&#10;&#13;

!&#10;&#13; - Працюйте над усіма елементами керування wpf, xaml, silverlight, такими як TextBlock, HyperlinkText та ін


1
(ідіть, виправте свою іншу відповідь та позначте, щоб її не

3

Якщо ви прив'язуєте текст TextBlock, жодна з інших відповідей не працює. Просто додайте '\ n' до тексту прив'язки туди, де ви хочете розбити.



1

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

напр.

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


1

Я запізнююсь на вечірку, але .. це більш-менш як я це зробив, (майте на увазі, мої ItemSources - це прості рядки, не відформатовані, і мені не потрібно було нічого 'convertBack')

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

У мене була подібна проблема і я хотів прив'язати рядок розмітки xaml до TextBlock. Основне зберігання декларативної розмітки всередині TextBlock у рядку для подальшого використання.

Ось як я це зробив : я підкласикував TextBlock, щоб зробити InlineCollection прив'язуваним, і написав конвертер між рядком та InlineCollection (або насправді загальний список Inlines.)


0

це &amp;#10;не спрацювало для мене, коли я використовував прив'язку. Але це працює:

$"first line {Environment.NewLine} second line"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.