WPFラベルの改行?


83

次のようなWPFのラベルのテキストに改行を追加するにはどうすればよいですか?

<Label>Lorem 
  ipsum</Label>

回答:


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

TextBlockはインラインオブジェクトのコレクションを子として受け入れるため、TextBlockを使用する必要があります。つまり、TextBlock要素に3つのインラインアイテム(Run Text = "Lorem"、LineBreak、およびRun Text = "ipsum")を指定します。

次のことはできません。

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

ラベルは1つのコンテンツ子要素を受け入れるためです。

また、ユースケースが正確に何であるかはわかりませんが、Label要素内にTextBlockを配置したことに注意してください。繰り返しですか?実際には、必要に応じて。2つの要素の違いに関する良い記事があります:LabelとTextBlockの違い


1
上記の回答を試したところ、コンテンツの途中にタグがあるとエラーが発生しました。代わりに、私はこれを使用しました: <TextBlock> <Run>First</Run> <LineBreak/> <Run>Second</Run> </TextBlock>
病原体

3
これはうまく機能しますが、ローカリゼーションを使用する場合は役に立ちません。その場合は使用Lorem&#x0a;Ipsum
stijn

103

WPFでは、値"&#10;"または"&#xA;"

例えば:

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

(「10」は改行のASCII番号です)

または

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

(「A」は16進数の改行のASCII番号です)

例、境界を示すための境界線の周りのラベル


3
これが受け入れられた答えであるべきであることに同意しました。よりエレガントで使いやすくなっています。
タイラー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でテスト済み。


1
<Label xml:space="preserve">text content
another line</Label>

うまくいくようです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.