Jak mogę dodać nowy wiersz w tekście etykiety w WPF, na przykład następujący?
<Label>Lorem
ipsum</Label>
Odpowiedzi:
<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
Lorem
Ipsum
w WPF można użyć wartości " "
lub"
"
Na przykład:
<Label Content="Lorem ipsum" />
(„10” to numer ASCII nowej linii)
lub
<Label Content="Lorem
ipsum" />
(„A” to numer ASCII dla nowej linii w formacie szesnastkowym)
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";
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
Line 2" MaxWidth="300" TextWrapping="Wrap"/>
</Button.ToolTip>
</Button>
Przetestowano na VS2019 + .NET 4.6.1 + WPF.
<TextBlock> <Run>First</Run> <LineBreak/> <Run>Second</Run> </TextBlock>