WPF のコンテンツ モデル

Windows Presentation Foundation (WPF) は、コンテンツのさまざまな種類の表示が主な目的である、数多くのコントロール型やコントロールに似た型を提供するプレゼンテーション プラットフォームです。 使用するコントロールまたは派生元として使用するコントロールを決定するには、各コントロールで最適に表示できるオブジェクトの種類を理解しておくことが重要です。

このトピックでは、WPF コントロール型とコントロールに似た型のコンテンツ モデルについて説明します。 コンテンツ モデルでは、コントロールで使用できるコンテンツが表されます。また、各コンテンツ モデルのコンテンツ プロパティについても示します。 コンテンツ プロパティは、オブジェクトのコンテンツの格納に使用されるプロパティです。

このトピックは、次のセクションで構成されています。

  • 任意のコンテンツを格納するクラス
  • UIElement オブジェクトのコレクションを格納するクラス
  • UIElement の外観に影響するクラス
  • UIElement の視覚的フィードバックを提供するクラス
  • ユーザーがテキストを入力できるようにするクラス
  • テキストを表示するクラス
  • テキストの書式を設定するクラス
  • 関連トピック

任意のコンテンツを格納するクラス

コントロールの中には、文字列、DateTime オブジェクト、追加項目のコンテナーである UIElement など、任意の型のオブジェクトを格納できるものがあります。 たとえば、Button にはイメージおよびテキストを格納できます。また、CheckBox には DateTime.Now の値を格納できます。

WPF には、任意のコンテンツを格納できるクラスが 4 つあります。 Control から継承するクラスの一覧を次の表に示します。

任意のコンテンツを格納するクラス

コンテンツ

ContentControl

単一の任意のオブジェクト。

HeaderedContentControl

任意のオブジェクトであるヘッダーと単一の項目。

ItemsControl

任意のオブジェクトのコレクション。

HeaderedItemsControl

任意のオブジェクトであるヘッダーと項目のコレクション。

これらのクラスから継承するコントロールは、同じ型のコンテンツを格納することができ、そのコンテンツを同じ方法で扱うことができます。 次の図は、イメージやテキストを格納する各コンテンツ モデルのコントロールを示しています。

Button、GroupBox、Listbax、TreeViewItem

単一の任意のオブジェクトを格納するコントロール

ContentControl クラスには、任意のコンテンツの 1 つが格納されます。 コンテンツ プロパティは Content です。 次に示すのは ContentControl から継承し、そのコンテンツ モデルを使用するコントロールです。

次の図は、Content が文字列、DateTime オブジェクト、Rectangle、および Panel (EllipseTextBlock を格納する) が設定された 4 つのボタンを示しています。

異なる型のコンテンツを持つ 4 つのボタン

4 つのボタン

Content プロパティの設定方法の例については、ContentControl のトピックを参照してください。

ヘッダーおよび単一の任意のオブジェクトを格納するコントロール

ContentControl から継承される HeaderedContentControl クラスは、ヘッダーを使用してコンテンツを表示します。 コンテンツ プロパティ ContentContentControl から継承し、Object 型の Header プロパティを定義します。その結果、ヘッダーとコンテンツの両者が任意のオブジェクトとなることができます。

次に示すのは HeaderedContentControl から継承し、そのコンテンツ モデルを使用するコントロールです。

次の図に、2 つの TabItem オブジェクトを示します。 1 つ目の TabItem には UIElement オブジェクトが Header および Content として付いています。 HeaderEllipseTextBlock を格納する StackPanel に設定されています。 ContentTextBlockLabel を格納する StackPanel に設定されています。 2 つ目の TabItem の場合、Header には文字列、Content には TextBlock が付いています。

Header プロパティで異なる型を使用する TabControl

TabControl

TabItem オブジェクトを作成する方法の例については、HeaderedContentControl のトピックを参照してください。

任意のオブジェクトのコレクションを格納するコントロール

Control から継承する ItemsControl クラスには、文字列、オブジェクト、他の要素などの複数の項目を格納できます。 このクラスのコンテンツ プロパティは ItemsSourceItems です。 ItemsSource は通常、データ収集時に ItemsControl を取得するために使用されます。 コレクションを使用して ItemsControl を取得しない場合は、Items プロパティを使用して項目を追加できます。

次に示すのは ItemsControl から継承し、そのコンテンツ モデルを使用するコントロールです。

次の図は、これらの型の項目を含む ListBox を示しています。

さまざまな種類のオブジェクトを格納する ListBox

4 種類の内容を含む ListBox

ヘッダーと任意のオブジェクトのコレクションを格納するコントロール

ItemsControl から継承する HeaderedItemsControl クラスには、文字列、オブジェクト、ヘッダー、他の要素などの複数の項目を格納できます。 このクラスは ItemsControl のコンテンツ プロパティである ItemsSourceItems を継承し、任意のオブジェクトとなるように Header プロパティを定義します。

次に示すのは HeaderedItemsControl から継承し、そのコンテンツ モデルを使用するコントロールです。

UIElement オブジェクトのコレクションを格納するクラス

Panel クラスは、子である UIElement オブジェクトの配置および配列を行います。 コンテンツ プロパティは Children です。

次に示すのは Panel クラスから継承し、そのコンテンツ モデルを使用するクラスです。

詳細については、「パネルの概要」を参照してください。

UIElement の外観に影響するクラス

Decorator クラスは、単一の子である UIElement 上またはその周囲に視覚的な効果を適用します。 コンテンツ プロパティは Child です。 次に示すのは Decorator から継承し、そのコンテンツ モデルを使用するクラスです。

周囲を Border で装飾した TextBox を次の図に示します。

境界線のある TextBlock

境界線が黒の TextBox

UIElement の視覚的フィードバックを提供するクラス

Adorner クラスは、ユーザーに視覚上の手掛かりを示します。 たとえば、Adorner を使用すると、要素に機能ハンドルを追加したり、コントロールに関する状態情報を提供したりできます。 Adorner クラスでは、独自の装飾を作成できるようにするフレームワークが用意されています。 WPF では、実装済みの装飾は用意されていません。 詳細については、「装飾の概要」を参照してください。

ユーザーがテキストを入力できるようにするクラス

WPF には、ユーザーがテキストを入力できるようにするための主要なコントロールが 3 つ用意されています。 各コントロールは、テキストをそれぞれの形式で表示できます。 次の表に、これら 3 つのテキスト関連のコントロールを、テキストの表示形式およびテキストを格納するプロパティと共に示します。

コントロール

テキストの表示形式

コンテンツ プロパティ

TextBox

書式なしテキスト

Text

RichTextBox

書式設定されたテキスト

Document

PasswordBox

非表示のテキスト (マスクされた文字)

Password

テキストを表示するクラス

書式なしのテキストまたは書式設定されたテキストを表示できるクラスはいくつかあります。 短いテキストを表示する場合は、TextBlock を使用します。 長いテキストを表示する場合は、FlowDocumentReader コントロール、FlowDocumentPageViewer コントロールまたは FlowDocumentScrollViewer コントロールを使用します。

TextBlock には、Text および Inlines という 2 つのコンテンツ プロパティがあります。 表示するテキストに一貫性のある書式を適用する場合は、Text プロパティの使用が適しています。 テキスト全体で異なる書式を使用する場合は、Inlines プロパティを使用します。 Inlines プロパティは、テキストの書式を指定する Inline オブジェクトのコレクションです。

FlowDocumentReaderFlowDocumentPageViewer、および FlowDocumentScrollViewer クラスのコンテンツ プロパティを次の表に示します。

コントロール

コンテンツ プロパティ

コンテンツ プロパティの型

FlowDocumentPageViewer

Document

IDocumentPaginatorSource

FlowDocumentReader

Document

FlowDocument

FlowDocumentScrollViewer

Document

FlowDocument

FlowDocument では IDocumentPaginatorSource インターフェイスを実装します。このため、3 つのクラスはすべて FlowDocument をコンテンツとして受け取ることができます。

テキストの書式を設定するクラス

TextElement およびその関連クラスでは、テキストの書式を設定できます。 TextElement オブジェクトには、TextBlock オブジェクトおよび FlowDocument オブジェクトでテキストを格納し、その書式を設定できます。 TextElement オブジェクトの主要な型は Block 要素および Inline 要素の 2 つです。 Block 要素は、段落や一覧などの 1 つのテキスト ブロックを表します。 Inline 要素は、ブロック内のテキストの部分を表します。 多くの Inline クラスでは、テキストに適用される書式を指定します。 それぞれの TextElement には独自のコンテンツ モデルがあります。 詳細については、「TextElement コンテンツ モデルの概要」を参照してください。

参照

その他の技術情報

WPF の基礎