次の方法で共有


コンテキスト アーキテクチャの編集

このトピックでは、WPF Designer for Visual Studio の機能プロバイダーと機能コネクタを開発するときに編集コンテキストが果たす役割について説明します。 機能プロバイダーと機能コネクタの詳細については、「機能プロバイダーと機能コネクタ」を参照してください。

編集コンテキスト: デザイナーの現在の状態のキャプチャ

ビジュアルなデザイナーでは、状態情報が使用されるに伴って蓄積されて膨大な量になります。 状態は、現在の選択範囲にあるオブジェクトやマウス ボタンのクリック時の動作など、あらゆる種類のデザイン時の情報を表します。 状態は、必要に応じて取得できるように、一括して格納される必要があります。 EditingContext クラスは、デザイナーの集約された状態リポジトリを表します。

[サービス]

サービスは、クラスの単一のインスタンスであり、動作を詳細に定義します。 サービスは、デザイナーの動作と実装を提供します。 サービスは、コンテキストに作成されると、そのコンテキストが破棄されるまで存在します。 サービスがコンテキストから消えることはありません。 サービスには一貫したインスタンス値があるため、いつでもキャッシュできます。 サービスを実装する方法を示すコード例については、「方法 : カスタム機能コネクタを作成する」を参照してください。

コンテキスト項目

コンテキスト項目とは、状態を格納する変更不可能なオブジェクトです。 一部のコンテキスト項目では、コンテキスト内の状態に対して操作を実行できるメソッドも定義されています。

コンテキスト項目は、コンテキストに追加したりコンテキストから削除したりできます。 コンテキスト項目は一時的なものですが、常に値を持ちます。 特定のコンテキスト項目がコンテキスト内に存在しなくても、既定値が常に存在するため、null が返されることはありません。

サービスとは異なり、コンテキスト項目の値は変わることがあるので、コンテキスト項目はキャッシュしないでください。 特定の型のコンテキスト項目が変更されたときに生成される変更コールバックをサブスクライブできます。

コンテキスト項目は不変ですが、新しいコンテキスト項目が既存のコンテキスト項目に置き換わることによって変化が表現されます。

サブスクリプション

サービスとコンテキスト項目にはマネージャーがあります。 サービス マネージャーとコンテキスト項目マネージャーは、基本的にはデータを格納するテーブルです。 たとえば、サービス マネージャーを使用して新しいサービスを発行できます。

サービス マネージャーとコンテキスト項目マネージャーは、サブスクリプション機構も提供します。これにより、特定のデータが存在する場合は、それがコードに通知されます。 この通知は、コールバック デリゲートとして実装されます。 サブスクリプションは、特定のサービスまたはコンテキスト項目の型が追加されたときに呼び出されるデリゲートです。

ComponentModel デザイナー フレームワークとの類似性

編集コンテキストは、System.ComponentModel.Design 名前空間の IDesignerHost インターフェイスおよび IServiceContainer インターフェイスと概念的に類似しています。 詳細については、「Windows フォーム デザイナーのフレームワークと WPF デザイナーのフレームワークの比較」を参照してください。

参照

参照

Microsoft.Windows.Design.Services

EditingContext

ContextItem

その他の技術情報

WPF デザイナーの機能拡張