WPF 標準コントロールデモアプリ › TextBlock

TextBlock Display

TextBlock は WPF でテキストを表示するための最も軽量なコントロールです。インライン要素(太字・斜体・ハイパーリンクなど)を含むリッチテキスト、テキストの折り返し・省略・トリミングをサポートします。

概要

WPF の TextBlockFrameworkElement を継承したシンプルで軽量なテキスト表示要素です。ラベルや UI のタイトル・説明文など、読み取り専用のテキストを表示するために広く使われます。

TextBlock は Inline 要素をコンテンツとして持ち、RunBoldItalicUnderlineHyperlinkLineBreakSpan などを組み合わせてリッチテキストを構成できます。

TextTrimming プロパティでテキストが長くて表示域に収まらない場合の省略方法を設定します。CharacterEllipsis は文字単位で省略して末尾に「...」を付け、WordEllipsis は単語境界で省略します。TextWrapping では折り返しの方法を設定します。

パフォーマンス面では、TextBlock は Label より軽量です(Label は ContentControl を継承)。フォームのラベル以外の用途(リストの各行のテキスト、ステータスバーのテキストなど)には TextBlock が推奨されます。

画面キャプチャ

textblock demo screen

デモしているプロパティ

以下のプロパティが WPF 標準コントロールデモアプリでインタラクティブにデモされています。

プロパティ設定値説明
Textstring表示するテキスト文字列を設定します。ViewModel のプロパティに OneWay バインドして動的な値を表示するのが一般的です。プロパティが更新されるたびに TextBlock の表示が自動的に更新されます。はまりポイント: Text プロパティを設定した TextBlock に同時に Inlines<Bold> などのインライン要素)を含めることはできません。テキストとインラインを混在させる場合は Run 要素の中で Text バインドを行ってください。
TextWrappingNoWrap / Wrap / WrapWithOverflowテキストの折り返し方法を設定します。NoWrap(デフォルト)は折り返しなし、Wrap は単語境界で折り返し、WrapWithOverflow は単語が収まらない場合でもその単語内で折り返します(URL や長いファイルパスを含む場合に適しています)。はまりポイント: NoWrap のまま幅を制限しないと、テキストが親コンテナをはみ出してレイアウトが崩れます。NoWrap を使う場合は必ず MaxWidth を設定するか、TextTrimming を組み合わせてください。
TextTrimmingNone / CharacterEllipsis / WordEllipsisテキストが表示域を超えた場合の省略方法を設定します。CharacterEllipsis は文字単位で省略して末尾に「…」を付け、WordEllipsis は単語境界で省略します。設定すると収まらない部分が「…」で省略されて表示されます。はまりポイント: TextTrimmingWidth または MaxWidth が設定されていないと機能しません。必ずサイズ制限を設定するか、幅を制限するコンテナ(Grid の列など)に配置してください。TextTrimming 使用時は ToolTip に全テキストをバインドしてホバーで確認できるようにすることを強く推奨します。
TextAlignmentLeft / Right / Center / Justifyテキストの水平方向の配置を設定します。ダイアログの案内メッセージやタイトルには Center、金額や数値には Right、長い段落テキストには Justify(両端揃え)が適しています。Left(デフォルト)は通常の本文テキストに使用します。はまりポイント: Justify は日本語テキストには見た目が不自然になることがあるため、長い日本語段落では Left を使う方が読みやすい場合がほとんどです。
FontSize / FontWeight / FontFamily / FontStylevariousフォントのサイズ・太さ・ファミリー・スタイルを設定します。これらは親要素から継承されるため、WindowApp.xaml のリソースで一度設定するとアプリ全体に適用されます。個別の TextBlock で上書きすることも可能です。はまりポイント: すべてのフォントがすべてのウェイト(FontWeight)をサポートしているわけではありません。対応していないウェイトを指定すると近いウェイトに自動変換されますが、意図した太さにならない場合があります。FontFamilyFontWeight の組み合わせは実際に動作確認してください。
Foreground (Control)Brushテキストの色を設定します。Foreground も親要素から継承されるため、WindowStackPanel に設定すると配下のすべての TextBlock に適用されます。テーマブラシ({DynamicResource ControlTextBrush} など)にバインドするとライト/ダークテーマの切り替えに自動対応できます。はまりポイント: ハードコードした色(Black など)を設定するとダークテーマ対応時に背景と同化して読めなくなります。テーマ対応が必要な場合は必ずシステムリソースまたはアプリのテーマブラシを使ってください。
LineHeight / LineStackingStrategydouble / LineStackingStrategy複数のフォントサイズが混在するリッチテキストや、行間を均一にしたい場合に使用します。LineHeight で行の高さをピクセルで指定し、LineStackingStrategy でスタッキング方法(BlockLineHeight: 各行に均等適用、MaxHeight: 行内最大フォントサイズを使用)を設定します。はまりポイント: LineHeight は段落全体ではなく「1行ごと」の高さです。LineHeight をフォントサイズより小さく設定すると行が重なって読めなくなります。最低でもフォントサイズの 1.2 倍程度を目安にしてください。
PaddingThicknessテキストとコントロール境界線の間の内側余白を設定します。ヒットテストの判定領域(クリックやホバーの反応範囲)も Padding の分だけ広がります。はまりポイント: TextBlock 自体の外側の余白には Padding ではなく Margin を使います。Padding は内側(テキストとボーダーの間)、Margin は外側(他の要素との間隔)という違いを混同しないようにしてください。

XAML 使用例

<StackPanel>
  <!-- シンプルなテキスト -->
  <TextBlock Text="{Binding Title}"
             FontSize="20" FontWeight="Bold" />

  <!-- テキストトリミング -->
  <TextBlock Text="{Binding Description}"
             TextTrimming="CharacterEllipsis"
             MaxWidth="300" />

  <!-- テキスト折り返し -->
  <TextBlock Text="{Binding Notes}"
             TextWrapping="Wrap" MaxWidth="400" />

  <!-- インライン要素によるリッチテキスト -->
  <TextBlock>
    <Bold>重要:</Bold> このデータは<Italic>削除できません</Italic>。
    <LineBreak />
    詳細は<Hyperlink NavigateUri="https://example.com">こちら</Hyperlink>をご確認ください。
  </TextBlock>
</StackPanel>

主な使用例

ヒントとベストプラクティス

関連コントロール

ソースコード

このデモ画面のソースコードは GitHub で公開しています。

GitHub で TextBlock のソースコードを見る →