次の方法で共有


WPF コンテンツ モデル

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

このトピックでは、WPF コントロールとコントロールに似た型のコンテンツ モデルの概要を示します。 コンテンツ モデルは、コントロールで使用できるコンテンツを記述します。 このトピックでは、各コンテンツ モデルのコンテンツ プロパティの一覧も示します。 コンテンツ プロパティは、オブジェクトのコンテンツを格納するために使用されるプロパティです。

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

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

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

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

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

コンテンツ モデルごとに 1 つずつ、4 つの異なるコントロールを示すスクリーンショット。

単一の任意のオブジェクトを含むコントロール

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

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

コンテンツ タイプが異なる 4 つのボタンを示すスクリーンショット。

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

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

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

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

次の図は、2 つの TabItem オブジェクトを示しています。 最初の TabItem には、HeaderContentとして UIElement オブジェクトがあります。 Header は、EllipseTextBlockを含む StackPanel に設定されます。 Content は、TextBlockLabelを含む StackPanel に設定されます。 2 番目の TabItem には、Header に文字列と、Content内の TextBlock があります。

Header プロパティでさまざまな型を使用する TabControl です。

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

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

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

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

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

4 種類のコンテンツを含む ListBox を示すスクリーンショット。

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

HeaderedItemsControl クラスは ItemsControl から継承され、文字列、オブジェクト、その他の要素などの複数の項目とヘッダーを含めることができます。 ItemsControl コンテンツ プロパティ、ItemsSource、および Itemsを継承し、任意のオブジェクトにできる Header プロパティを定義します。

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

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

Panel クラスは、子 UIElement オブジェクトの位置を決定し、配置します。 そのコンテンツ プロパティは Childrenです。

次のクラスは、Panel クラスを継承し、そのコンテンツ モデルを使用します。

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

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

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

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

黒い境界線Layout_Border_around_TextBox を持つテキスト ボックスを する
ボーダーを持つテキストブロック

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

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

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

WPF には、ユーザーがテキストを入力できるようにする 3 つの主要なコントロールが用意されています。 各コントロールは、テキストを異なる方法で表示します。 次の表に、これら 3 つのテキスト関連コントロール、テキストを表示するときの機能、およびコントロールのテキストを含むプロパティを示します。

コントロール テキストは次のように表示されます。 コンテンツのプロパティ
TextBox プレーンテキスト Text
RichTextBox 書式設定されたテキスト Document
PasswordBox 非表示のテキスト (文字はマスクされます) Password

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

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

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

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

コントロール コンテンツプロパティ コンテンツ プロパティの種類
FlowDocumentPageViewer ドキュメント IDocumentPaginatorSource
FlowDocumentReader ドキュメント FlowDocument
FlowDocumentScrollViewer ドキュメント FlowDocument

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

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

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

関連項目