Nowa linia w etykiecie WPF?

86

Jak mogę dodać nowy wiersz w tekście etykiety w WPF, na przykład następujący?

<Label>Lorem 
  ipsum</Label>
Sód
źródło

Odpowiedzi:

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

Musisz użyć TextBlock, ponieważ TextBlock akceptuje jako elementy podrzędne kolekcję obiektów Inline. Więc dajesz elementowi TextBlock trzy elementy Inline: Run Text = "Lorem", LineBreak i Run Text = "ipsum".

Nie możesz wykonać następujących czynności:

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

ponieważ etykieta akceptuje jeden element podrzędny treści.

Nie jestem też pewien, jaki jest twój przypadek użycia, ale zauważ, że umieściłem TextBlock wewnątrz elementu Label. Czy to się powtarza? Niezupełnie, w zależności od twoich potrzeb. Oto dobry artykuł na temat różnic między tymi dwoma elementami: różnica między Label i TextBlock

Szymon Rozga
źródło
1
Kiedy wypróbowałem powyższą odpowiedź, wystąpił błąd związany z umieszczeniem tagu w środku treści. Zamiast tego użyłem tego: <TextBlock> <Run>First</Run> <LineBreak/> <Run>Second</Run> </TextBlock>
Pathogen
4
Działa to świetnie, ale nie jest przydatne podczas korzystania z lokalizacji. W takim przypadku użyjLorem&#x0a;Ipsum
stijn
107

w WPF można użyć wartości "&#10;"lub"&#xA;"

Na przykład:

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

(„10” to numer ASCII nowej linii)

lub

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

(„A” to numer ASCII dla nowej linii w formacie szesnastkowym)

Na przykład z etykietą z obramowaniem, aby pokazać granicę

00jt
źródło
3
Zgoda, to powinna być akceptowana odpowiedź. Jest bardziej elegancki i prostszy w użyciu.
Tyler C
10

Robiąc to w ViewModel lub Model, odkryłem, że użycie Environment.NewLine daje najbardziej spójny wynik, w tym lokalizację. Powinien również działać bezpośrednio w Widoku, ale nie testowałem tego.

Przykład:

W widoku

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

W ViewModel:

SomeStringObject.ParameterName = "First line" + Environment.NewLine + "Second line";
HeyZiko
źródło
2

Przykład dodawania etykietki narzędzi z wieloma wierszami do kontrolki, takiej jak przycisk. Etykietka ma ograniczoną szerokość, więc zostanie zawinięta, jeśli zdanie jest zbyt szerokie.

<!-- 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>

Przetestowano na VS2019 + .NET 4.6.1 + WPF.

Contango
źródło
2
<Label xml:space="preserve">text content
another line</Label>

wydaje się też działać

Karl
źródło