基本要素の概要
Windows Presentation Foundation (WPF) のクラスの高い割合は、SDK ドキュメントで基本要素クラスとして一般的に参照される 4 つのクラスから派生しています。 これらのクラスは、UIElement、FrameworkElement、ContentElement、および FrameworkContentElementです。 DependencyObject クラスも関連しています。これは、UIElement と ContentElement の両方の共通の基底クラスであるためです。
WPF クラスの基本要素 API
UIElement と ContentElement の両方が、やや異なる経路を介して、DependencyObjectから派生しています。 このレベルの分割では、ユーザー インターフェイスで UIElement または ContentElement がどのように使用されるか、およびアプリケーションでどのような目的で機能するかを扱います。 UIElement クラス階層にも Visual があります。これは、Windows Presentation Foundation (WPF) の基になる下位レベルのグラフィックス サポートを公開するクラスです。 Visual は、独立した四角形の画面領域を定義することによってレンダリング フレームワークを提供します。 実際には、UIElement は、より大きなオブジェクト モデルをサポートする要素用であり、四角形の画面領域として記述できる領域にレンダリングしてレイアウトすることを目的としており、コンテンツ モデルが意図的により開いている場合は、さまざまな要素の組み合わせを許可します。 ContentElement は Visualから派生しません。そのモデルは、要素を解釈し、Windows Presentation Foundation (WPF) が使用する完全な Visual を生成するリーダーやビューアーなど、他の何かによって ContentElement が使用されるということです。 特定の UIElement クラスはコンテンツ ホストを目的としています。1 つ以上の ContentElement クラスのホスティングとレンダリングを提供します (DocumentViewer は、このようなクラスの例です)。 ContentElement は、オブジェクト モデルがやや小さく、UIElement内でホストされる可能性があるテキスト、情報、またはドキュメント コンテンツに対応する要素の基本クラスとして使用されます。
Framework-Level と Core-Level
UIElement は FrameworkElementの基底クラスとして機能し、ContentElement は FrameworkContentElementの基底クラスとして機能します。 この次のレベルのクラスの目的は、WPF フレームワーク レベルとは別に WPF コア レベルをサポートすることです。この区分は、PresentationCore アセンブリと PresentationFramework アセンブリの間での API の分割にも反映されています。 WPF フレームワーク レベルでは、プレゼンテーション用のレイアウト マネージャーの実装など、基本的なアプリケーションのニーズに合わせて、より完全なソリューションが提供されます。 WPF コア レベルでは、追加のアセンブリのオーバーヘッドを発生させずに、WPF の多くを使用する方法が提供されます。 これらのレベルの違いは、ほとんどの一般的なアプリケーション開発シナリオでは非常にまれに重要です。一般に、WPF API は全体として考え、WPF フレームワーク レベルと WPF コア レベルの違いには関係ありません。 たとえば、ソリューション全体にユーザー インターフェイス (UI) の構成とレイアウトの独自の実装が既に存在する場合など、アプリケーションの設計で大量の WPF フレームワーク レベル機能を置き換える場合は、レベルの違いについて知る必要があります。
派生元とする要素の選択
WPF を拡張するカスタム クラスを作成する最も実用的な方法は、既存のクラス階層を通じて必要な機能を可能な限り取得する WPF クラスの 1 つから派生することです。 このセクションでは、継承元のクラスを決定するのに役立つ、最も重要な 3 つの要素クラスに付属する機能の一覧を示します。
WPF クラスから派生するより一般的な理由の 1 つであるコントロールを実装する場合は、実用的なコントロール、コントロール ファミリの基本クラス、または少なくとも Control 基底クラスから派生させる必要があります。 いくつかのガイダンスと実際の例については、「コントロール作成の概要」を参照してください。
コントロールを作成せず、階層の上位にあるクラスから派生する必要がある場合は、次のセクションは、各基本要素クラスで定義される特性のガイドとして意図されています。
DependencyObjectから派生するクラスを作成する場合は、次の機能を継承します。
UIElementから派生するクラスを作成する場合は、DependencyObjectによって提供される機能に加えて、次の機能を継承します。
アニメーション化されたプロパティ値の基本的なサポート。 詳細については、アニメーションの概要を参照してください。
基本的な入力イベントのサポートとコマンドのサポート。 詳細については、「
入力の概要 とコマンド実行の概要を参照してください。 レイアウト システムに情報を提供するためにオーバーライドできる仮想メソッド。
FrameworkElementから派生するクラスを作成する場合は、UIElementによって提供される機能に加えて、次の機能を継承します。
スタイル設定とストーリーボードのサポート。 詳細については、「ストーリーボードの概要」
および を参照してください。 データ バインディングのサポート。 詳細については、「データ バインディングの概要」を参照してください。
動的リソース参照のサポート。 詳細については、「XAML リソース」を参照してください。
プロパティ値の継承のサポート、およびデータ バインディング、スタイル、レイアウトのフレームワーク実装など、フレームワーク サービスにプロパティに関する条件を報告するのに役立つメタデータ内のその他のフラグ。 詳細については、「Framework プロパティ メタデータ」を参照してください。
論理ツリーの概念。 詳細については、「WPFの
ツリー」を参照してください。 レイアウト に影響を与えるプロパティの変更を検出できる OnPropertyChanged オーバーライドなど、レイアウト システムの実用的な WPF フレームワーク レベルの実装のサポート。
ContentElementから派生するクラスを作成する場合は、DependencyObjectによって提供される機能に加えて、次の機能を継承します。
基本的な入力イベントのサポートとコマンドのサポート。 詳細については、「
入力の概要 とコマンド実行の概要を参照してください。
FrameworkContentElementから派生するクラスを作成すると、ContentElementによって提供される機能に加えて、次の機能が得られます。
スタイル設定とストーリーボードのサポート。 詳細については、「アニメーションの概要」
および を参照してください。 データ バインディングのサポート。 詳細については、「データ バインディングの概要」を参照してください。
動的リソース参照のサポート。 詳細については、「XAML リソース」を参照してください。
プロパティ値の継承のサポート、およびデータ バインディング、スタイル、レイアウトのフレームワーク実装などのフレームワーク サービスにプロパティに関する条件を報告するのに役立つメタデータ内のその他のフラグ。 詳細については、「Framework プロパティ メタデータ」を参照してください。
レイアウト システムの変更 (ArrangeOverrideなど) へのアクセスは継承しません。 レイアウト システムの実装は、FrameworkElementでのみ使用できます。 ただし、レイアウトに影響を与えるプロパティへの変更を検出し、任意のコンテンツ ホストに報告できる OnPropertyChanged オーバーライドを継承します。
コンテンツ モデルは、さまざまなクラスについて文書化されています。 クラスのコンテンツ モデルは、派生元の適切なクラスを見つける場合に考慮する必要がある 1 つの要素です。 詳細については、「WPF コンテンツ モデルの
その他の基本クラス
DispatcherObject
DispatcherObject は、WPF スレッド モデルのサポートを提供し、WPF アプリケーション用に作成されたすべてのオブジェクトを Dispatcherに関連付けできるようにします。 UIElement、DependencyObject、または Visualから派生しない場合でも、このスレッド モデルのサポートを得るには、DispatcherObject からの派生を検討する必要があります。 詳細については、「スレッド モデルの」を参照してください。
ビジュアル
Visual は、通常、ほぼ四角形の領域で視覚的な表現を必要とする 2D オブジェクトの概念を実装します。 Visual の実際のレンダリングは、他のクラス (自己完結型ではありません) で行われますが、Visual クラスには、さまざまなレベルのレンダリング プロセスで使用される既知の型が用意されています。 Visual はヒット テストを実装しますが、ヒット テストの陽性を報告するイベントは公開されません (これらは UIElement)。 詳細については、「Visual Layer Programming」を参照してください。
冷凍可能
Freezable は、変更できないオブジェクトが必要な場合やパフォーマンス上の理由から必要なときにオブジェクトのコピーを生成する手段を提供することで、変更可能なオブジェクトの不変性をシミュレートします。 Freezable タイプは、ジオメトリやブラシなどの特定のグラフィックス要素やアニメーションに共通の基礎を提供します。 特に、Freezable は Visualではありません。Freezable が別のオブジェクトのプロパティ値を補完するために適用された場合、Freezable はサブプロパティに変わる可能性のあるプロパティを持っており、そのサブプロパティがレンダリングに影響を与えることがあります。 詳細については、「Freezable オブジェクトの概要」を参照してください。
Animatable は、アニメーション コントロール レイヤーと一部のユーティリティ メンバーを明示的に追加する Freezable 派生クラスであり、現在アニメーション化されているプロパティをアニメーション化されていないプロパティと区別できます。
コントロール
Control は、テクノロジに応じてコントロールまたはコンポーネントと呼ばれるオブジェクトの種類の基本クラスです。 一般に、WPF コントロール クラスは、UI コントロールを直接表すか、コントロールの構成に密接に関与するクラスです。 Control 有効にする主な機能は、テンプレートの制御です。
関連項目
.NET Desktop feedback