Новая строка в WPF-метке?

86

Как я могу добавить новую строку в текст метки в WPF, например следующий?

<Label>Lorem 
  ipsum</Label>
Натриум
источник

Ответы:

117
<Label><TextBlock>Lorem<LineBreak/>ipsum</TextBlock></Label>

Вам необходимо использовать TextBlock, потому что TextBlock принимает в качестве дочерних элементов коллекцию встроенных объектов. Итак, вы даете элементу TextBlock три встроенных элемента: Run Text = "Lorem", LineBreak и Run Text = "ipsum".

Вы не можете делать следующее:

<Label>Lorem<LineBreak/>ipsum</Label>`

потому что метка принимает один дочерний элемент содержимого.

Кроме того, не совсем уверен, каков ваш вариант использования, но обратите внимание, что я поместил TextBlock внутри вашего элемента Label. Это повторяется? Не совсем, в зависимости от ваших потребностей. Вот хорошая статья о различиях между двумя элементами: Разница между Label и TextBlock

Шимон Розга
источник
1
Когда я попробовал ответ выше, у меня возникла ошибка из-за наличия тега в середине моего контента. Вместо этого я использовал это: <TextBlock> <Run>First</Run> <LineBreak/> <Run>Second</Run> </TextBlock>
Патоген
4
Это прекрасно работает, но бесполезно при использовании локализации. В таком случае используйтеLorem&#x0a;Ipsum
stijn
107

в WPF вы можете использовать значение "&#10;"или"&#xA;"

Например:

<Label Content="Lorem&#10;ipsum" />

(«10» - это номер ASCII для новой строки)

или же

<Label Content="Lorem&#xA;ipsum" />

(«A» - это номер ASCII для новой строки в шестнадцатеричном формате)

Пример, с меткой вокруг границы для отображения границы

00jt
источник
3
Согласен, это должен быть принятый ответ. Это элегантнее и проще в использовании.
Tyler C
10

Делая это в ViewModel или Model, я обнаружил, что использование Environment.NewLine дает наиболее последовательный результат, включая локализацию. Он также должен работать непосредственно в представлении, но я этого не тестировал.

Пример:

В представлении

<Label Content="{Binding SomeStringObject.ParameterName}" />

В ViewModel:

SomeStringObject.ParameterName = "First line" + Environment.NewLine + "Second line";
Привет, Зико
источник
2

Пример того, как добавить всплывающую подсказку с несколькими строками к элементу управления, например к кнопке. Всплывающая подсказка ограничена по ширине, поэтому она будет переноситься, если предложение слишком широкое.

<!-- Button would need some properties to make it clickable.-->
<Button>
   <Button.ToolTip>
      <TextBlock Text="Line 1&#x0a;Line 2" MaxWidth="300" TextWrapping="Wrap"/>
    </Button.ToolTip>
</Button>

Протестировано на VS2019 + .NET 4.6.1 + WPF.

Контанго
источник
2
<Label xml:space="preserve">text content
another line</Label>

кажется, тоже работает

Карл
источник