WPF 標準コントロールデモアプリ › TextBlock
TextBlock Display
TextBlock は WPF でテキストを表示するための最も軽量なコントロールです。インライン要素(太字・斜体・ハイパーリンクなど)を含むリッチテキスト、テキストの折り返し・省略・トリミングをサポートします。
概要
WPF の TextBlock は FrameworkElement を継承したシンプルで軽量なテキスト表示要素です。ラベルや UI のタイトル・説明文など、読み取り専用のテキストを表示するために広く使われます。
TextBlock は Inline 要素をコンテンツとして持ち、Run、Bold、Italic、Underline、Hyperlink、LineBreak、Span などを組み合わせてリッチテキストを構成できます。
TextTrimming プロパティでテキストが長くて表示域に収まらない場合の省略方法を設定します。CharacterEllipsis は文字単位で省略して末尾に「...」を付け、WordEllipsis は単語境界で省略します。TextWrapping では折り返しの方法を設定します。
パフォーマンス面では、TextBlock は Label より軽量です(Label は ContentControl を継承)。フォームのラベル以外の用途(リストの各行のテキスト、ステータスバーのテキストなど)には TextBlock が推奨されます。
画面キャプチャ

デモしているプロパティ
以下のプロパティが WPF 標準コントロールデモアプリでインタラクティブにデモされています。
| プロパティ | 設定値 | 説明 |
|---|---|---|
Text | string | 表示するテキスト文字列を設定します。ViewModel のプロパティに OneWay バインドして動的な値を表示するのが一般的です。プロパティが更新されるたびに TextBlock の表示が自動的に更新されます。はまりポイント: Text プロパティを設定した TextBlock に同時に Inlines(<Bold> などのインライン要素)を含めることはできません。テキストとインラインを混在させる場合は Run 要素の中で Text バインドを行ってください。 |
TextWrapping | NoWrap / Wrap / WrapWithOverflow | テキストの折り返し方法を設定します。NoWrap(デフォルト)は折り返しなし、Wrap は単語境界で折り返し、WrapWithOverflow は単語が収まらない場合でもその単語内で折り返します(URL や長いファイルパスを含む場合に適しています)。はまりポイント: NoWrap のまま幅を制限しないと、テキストが親コンテナをはみ出してレイアウトが崩れます。NoWrap を使う場合は必ず MaxWidth を設定するか、TextTrimming を組み合わせてください。 |
TextTrimming | None / CharacterEllipsis / WordEllipsis | テキストが表示域を超えた場合の省略方法を設定します。CharacterEllipsis は文字単位で省略して末尾に「…」を付け、WordEllipsis は単語境界で省略します。設定すると収まらない部分が「…」で省略されて表示されます。はまりポイント: TextTrimming は Width または MaxWidth が設定されていないと機能しません。必ずサイズ制限を設定するか、幅を制限するコンテナ(Grid の列など)に配置してください。TextTrimming 使用時は ToolTip に全テキストをバインドしてホバーで確認できるようにすることを強く推奨します。 |
TextAlignment | Left / Right / Center / Justify | テキストの水平方向の配置を設定します。ダイアログの案内メッセージやタイトルには Center、金額や数値には Right、長い段落テキストには Justify(両端揃え)が適しています。Left(デフォルト)は通常の本文テキストに使用します。はまりポイント: Justify は日本語テキストには見た目が不自然になることがあるため、長い日本語段落では Left を使う方が読みやすい場合がほとんどです。 |
FontSize / FontWeight / FontFamily / FontStyle | various | フォントのサイズ・太さ・ファミリー・スタイルを設定します。これらは親要素から継承されるため、Window や App.xaml のリソースで一度設定するとアプリ全体に適用されます。個別の TextBlock で上書きすることも可能です。はまりポイント: すべてのフォントがすべてのウェイト(FontWeight)をサポートしているわけではありません。対応していないウェイトを指定すると近いウェイトに自動変換されますが、意図した太さにならない場合があります。FontFamily と FontWeight の組み合わせは実際に動作確認してください。 |
Foreground (Control) | Brush | テキストの色を設定します。Foreground も親要素から継承されるため、Window や StackPanel に設定すると配下のすべての TextBlock に適用されます。テーマブラシ({DynamicResource ControlTextBrush} など)にバインドするとライト/ダークテーマの切り替えに自動対応できます。はまりポイント: ハードコードした色(Black など)を設定するとダークテーマ対応時に背景と同化して読めなくなります。テーマ対応が必要な場合は必ずシステムリソースまたはアプリのテーマブラシを使ってください。 |
LineHeight / LineStackingStrategy | double / LineStackingStrategy | 複数のフォントサイズが混在するリッチテキストや、行間を均一にしたい場合に使用します。LineHeight で行の高さをピクセルで指定し、LineStackingStrategy でスタッキング方法(BlockLineHeight: 各行に均等適用、MaxHeight: 行内最大フォントサイズを使用)を設定します。はまりポイント: LineHeight は段落全体ではなく「1行ごと」の高さです。LineHeight をフォントサイズより小さく設定すると行が重なって読めなくなります。最低でもフォントサイズの 1.2 倍程度を目安にしてください。 |
Padding | Thickness | テキストとコントロール境界線の間の内側余白を設定します。ヒットテストの判定領域(クリックやホバーの反応範囲)も 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>主な使用例
- UI ラベル・タイトル — ウィンドウのタイトル、セクションのヘッダー、説明テキストなど、UI の読み取り専用テキストに使用します。
- リストアイテムのテキスト — DataTemplate 内でアイテムのプロパティをテキスト表示します。
- ステータスバーメッセージ — アプリ下部のステータスバーに現在の状態やメッセージを表示します。
- エラーメッセージ — バリデーションエラーや情報メッセージを Foreground=Red などで強調表示します。
- ツールチップコンテンツ — ToolTip.Content に TextBlock を使って折り返し・書式付きのツールチップテキストを表示します。
ヒントとベストプラクティス
- Label より TextBlock が軽量 — アクセスキーや Target が不要な場合は Label より TextBlock が推奨されます。Label は
ContentControlを継承するため TextBlock より多くのリソースを消費します。 - TextTrimming は MaxWidth/Width と組み合わせる —
TextTrimmingは幅が制限されていないと機能しません。MaxWidthまたはWidthを設定するか、幅が制限されるコンテナ(Grid の列など)に配置してください。省略が発生した場合に備え、ToolTip="{Binding Text, RelativeSource={RelativeSource Self}}"で全テキストをホバー表示するのがベストプラクティスです。 - ToolTipで全テキストを表示 — TextTrimming で省略表示する場合、
ToolTip="{Binding Text, RelativeSource={RelativeSource Self}}"のように自分自身のTextをバインドすると、省略表示しているかどうかにかかわらず常にフルテキストがツールチップに表示されます。 - Runs を使った色分け —
Run要素のForegroundを個別に設定して、テキストの一部を異なる色で強調表示できます。ただしTextプロパティとインライン要素は同時に使えないため、テキスト全体をRunで構成する必要があります。 - フォント設定は親要素で一元管理する — 同じフォント設定を複数の TextBlock で共有する場合は、共通の親要素(
StackPanelやWindow)に設定するか、App.xamlのStyleリソースで定義すると管理が楽になります。 - TextBlock vs RichTextBox — TextBlock は読み取り専用のシンプルなリッチテキストに使います。ユーザーが編集できるリッチテキストには RichTextBox を使います。
関連コントロール
ソースコード
このデモ画面のソースコードは GitHub で公開しています。