WPF のコンテンツ モデル

Windows Presentation Foundation (WPF) は、多くのコントロールやコントロールのような型を提供する表示プラットフォームで、その主な目的は、異なる種類のコンテンツを表示することです。 使用するコントロールまたは派生元のコントロールを判断するには、特定のコントロールが最適に表示できるオブジェクトの種類を理解する必要があります。

このトピックは、WPF コントロールとコントロールのような型に関するコンテンツ モデルのまとめです。 コンテンツ モデルは、どのようなコンテンツをコントロールで使用できるかについて説明します。 このトピックは、各コンテンツ モデルのコンテンツのプロパティもリストします。 コンテンツのプロパティは、オブジェクトのコンテンツの格納に使用されるプロパティです。

任意のコンテンツを含むクラス

一部のコントロールには、文字列、DateTime オブジェクト、追加項目のコンテナーである UIElement など、任意の型のオブジェクトを含めることができます。 たとえば、Button には、1 つの画像といくつかのテキストを含めることができます。また、CheckBox には、DateTime.Now の値を含めることができます。

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

任意のコンテンツを含むクラス Content
ContentControl 1 つの任意のオブジェクト。
HeaderedContentControl ヘッダーと 1 つの項目。両方とも任意のオブジェクトです。
ItemsControl 任意のオブジェクトのコレクション。
HeaderedItemsControl ヘッダーと項目のコレクション。すべて任意のオブジェクトです。

これらのクラスから継承するコントロールは、同じ種類のコンテンツを格納でき、同じ方法でコンテンツを処理することができます。 次の図では、画像とテキストを含む各コンテンツ モデルの 1 つのコントロールを示します。

Screenshot that shows four different controls, one from each content model.

任意の 1 つのオブジェクトを格納しているコントロール

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

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

Screenshot that shows four buttons with different content types.

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

ヘッダーと任意の 1 つのオブジェクトを格納しているコントロール

HeaderedContentControl クラスでは ContentControl が継承され、ヘッダー付きのコンテンツが表示されます。 コンテンツ プロパティ ContentContentControl から継承され、Object 型の Header プロパティが定義されています。したがって、どちらも任意のオブジェクトにできます。

次のコントロールでは HeaderedContentControl が継承され、そのコンテンツ モデルが使用されます。

次の図には、2 つの TabItem オブジェクトが示されています。 1 つ目の TabItem では、Header および Content として UIElement オブジェクトが使用されています。 Header は、EllipseTextBlock が含まれる StackPanel に設定されています。 Content は、TextBlockLabel が含まれる StackPanel に設定されています。 2 つ目の TabItem は、Header が文字列で、ContentTextBlock です。

TabControl that uses different types in the Header property.

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

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

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

次のコントロールでは ItemsControl が継承され、そのコンテンツ モデルが使用されます。

次の図では、以下の種類の項目が含まれる ListBox を示します。

Screenshot that shows a ListBox with four types of content.

ヘッダーと任意のオブジェクトのコレクションを含むコントロール

HeaderedItemsControl クラスでは ItemsControl が継承され、文字列、オブジェクト、その他の要素やヘッダーなど、複数の項目を含めることができます。 ItemsControl のコンテンツ プロパティ、ItemsSourceItems が継承され、任意のオブジェクトを使用できる Header プロパティが定義されています。

次のコントロールでは HeaderedItemsControl が継承され、そのコンテンツ モデルが使用されます。

UIElement オブジェクトのコレクションを含むクラス

Panel クラスでは、子の UIElement オブジェクトが配置されて調整されます。 そのコンテンツ プロパティは Children です。

次のクラスでは Panel クラスが継承され、そのコンテンツ モデルが使用されています。

詳細については、「Panels Overview」を参照してください。

UIElement の外観に影響を与えるクラス

Decorator クラスでは、1 つの子 UIElement またはその周囲に対して視覚効果が適用されます。 そのコンテンツ プロパティは Child です。 次のクラスでは Decorator が継承され、そのコンテンツ モデルが使用されます。

次の図では、周囲に Border が使用されている (修飾されている) TextBox を示します。

TextBox with black border
境界がある TextBlock

UIElement についての視覚的なフィードバックを提供するクラス

Adorner クラスでは、ユーザーに視覚的手掛かりが提供されます。 たとえば、要素に機能ハンドルを追加したり、コントロールに関する状態情報を提供したりするために、Adorner を使用します。 Adorner クラスでは、独自の装飾を作成できるように、フレームワークが提供されます。 WPF は実装された装飾は提供しません。 詳しくは、Adorners Overviewをご覧ください。

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

WPF は、ユーザーがテキストを入力できるようにする 3 つの主なコントロールを提供します。 各コントロールは、異なる方法で、テキストを表示します。 次の表は、これら 3 つのテキスト関連のコントロール、テキストを表示するときのそれぞれの機能、およびコントロールのテキストを格納するそれぞれのプロパティの一覧です。

Control テキストの表示形態 コンテンツのプロパティ
TextBox プレーンテキスト Text
RichTextBox 書式付きテキスト Document
PasswordBox 非表示のテキスト (文字はマスクされます) Password

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

いくつかのクラスを使用して、プレーン テキストまたは書式設定されたテキストを表示できます。 TextBlock を使用すると、少量のテキストを表示できます。 大量のテキストを表示する場合は、FlowDocumentReaderFlowDocumentPageViewer、または FlowDocumentScrollViewer のいずれかのコントロールを使用します。

TextBlock には、TextInlines という 2 つのコンテンツ プロパティがあります。 一貫した書式設定を使用するテキストを表示するときの最適な選択肢は、多くの場合 Text プロパティです。 テキスト全体でさまざまな書式設定を使用する場合は、Inlines プロパティを使用します。 Inlines プロパティは、Inline オブジェクトのコレクションであり、テキストを書式設定する方法を指定します。

次の表は、FlowDocumentReaderFlowDocumentPageViewerFlowDocumentScrollViewer の各クラスのコンテンツ プロパティの一覧です。

Control コンテンツのプロパティ コンテンツのプロパティの型
FlowDocumentPageViewer ドキュメント IDocumentPaginatorSource
FlowDocumentReader ドキュメント FlowDocument
FlowDocumentScrollViewer ドキュメント FlowDocument

FlowDocument では、IDocumentPaginatorSource インターフェイスが実装されています。したがって、3 つのクラスすべてで、コンテンツとして FlowDocument を使用できます。

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

TextElement とその関連クラスでは、テキストを書式設定できます。 TextElement オブジェクトを使うと、TextBlock オブジェクトと FlowDocument オブジェクトにテキストを格納して書式設定できます。 TextElement オブジェクトの 2 つの主な種類は、Block 要素と Inline 要素です。 Block 要素は、段落やリストなどのテキストのブロックを表します。 Inline 要素は、ブロック内のテキストの一部を表します。 多くの Inline クラスでは、適用対象のテキストの書式が指定されます。 各 TextElement には、独自のコンテンツ モデルがあります。 詳細については、「TextElement Content Model Overview」を参照してください。

関連項目