Как я могу добавить разрыв строки в текст, когда он задается как атрибут, т.е.
<TextBlock Text="Stuff on line1 \n Stuff on line2" />
Разбить его на разорванный формат не вариант для моей конкретной ситуации. Мне нужен какой-то способ подражать следующему:
<TextBlock>
<TextBlock.Text>
Stuff on line1 <LineBreak/>
Stuff on line2
</TextBlock.Text>
<TextBlock/>
Может быть, вы можете использовать атрибут xml: space = "preserve" для сохранения пробелов в исходном XAML
источник
xml:space="preserve"
также сохранятся отступы, которые обычно присутствуют в XAML. Таким образом, явное,<LineBreak />
как предложено выше, кажется более чистым решением.Когда вам нужно сделать это в виде строки (например: в ваших ресурсах), вам нужно использовать
xml:space="preserve"
и коды символов амперсанда:Или буквальные переводы строк в тексте:
Предупреждение: если вы пишете код, как во втором примере, вы вставляете либо новую строку, либо возврат каретки и новую строку, в зависимости от окончания строки вашей операционной системы и / или текстового редактора. Например, если вы напишите это и передадите его в git из систем linux, все может показаться хорошим - но если кто-то клонирует его в Windows, git преобразует ваши окончания строк в
\r\n
зависимости от того, для чего предназначена ваша строка ... вы может сломать мир.Просто знайте об этом, когда вы сохраняете пустое пространство. Если вы напишите что-то вроде этого:
Вы фактически добавили четыре переноса строк, возможно, четыре возврата каретки и потенциально незаполненный пробел ...
источник
xml:space="preserve"
атрибут кResourceDictionary
такому, чтобы вам не нужно было применять его к каждой строке ресурса.<System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String>
(с разрывом строки между первой и второй строкой)xml:space="preserve"
Вам нужно просто удалить
<TextBlock.Text>
и добавить свой контент следующим образом:источник
Обратите внимание, что для этого вам нужно сделать это в атрибуте Text, вы не можете использовать контент, как
источник
Может быть, кто-то предпочитает
с
xmlns:s="clr-namespace:System;assembly=mscorlib"
.источник
Для тех, кто попробовал каждый ответ на этот вопрос и до сих пор ломает голову над тем, почему ни один из них не работает для вас, вы могли столкнуться с проблемой, с которой я столкнулся.
Мое
TextBlock.Text
свойство находилось внутриToolTipService.ToolTip
элемента, и оно было связано со свойством объекта, данные которого извлекались из хранимой процедуры SQL. Теперь данные из этого конкретного свойства в хранимой процедуре извлекались из функции SQL.Поскольку у меня ничего не получалось, я прекратил поиск и создал класс конвертера ниже:
В итоге мне пришлось использовать
Enivornment.NewLine
метод из ответа @ dparker . Я дал указание конвертеру найти любое возможное текстовое представление новой строки и заменить его наEnvironment.NewLine
.Это сработало!
Однако я все еще был озадачен тем, почему ни один из других методов не работал со свойствами привязки к базе данных.
Я оставил комментарий на принятый ответ @ BobKing :
Он ответил:
Лампа погасла!
Я вошел в мою функцию SQL, заменил мои текстовые представления новых строк на ...
... убрал конвертер из моей
TextBlock.Text
привязки, и просто так ... он работал!источник
Я нашел это полезным, но столкнулся с некоторыми ошибками при добавлении его в тег «Content = ...» в XAML.
У меня было несколько строк в контенте, и позже я обнаружил, что в контенте есть пробелы, хотя я этого не указал. поэтому, чтобы обойти это и заставить его «игнорировать» пробел, я реализовал такой, как этот.
надеюсь, это поможет кому-то еще.
(Вывод имеет три строки текста с пустой строкой между ними.)
источник
Я понимаю, что это по старому вопросу, но просто хотел бы добавить, что
также работает, если делать это через код.
источник
не то, чтобы это важно знать, но то, что вы указываете между тегами TextBlock, называется встроенным содержимым и переходит в свойство TextBlock.Inlines, которое является InlineCollection и содержит элементы типа Inline. Подклассами Inline являются Run и LineBreak, среди прочих. см. TextBlock.Inlines
источник
Также не работает с
Ничего страшного, просто нужно использовать
вместо.
источник
источник
Код за решением
источник