更新 : 2007 年 11 月
このトピックでは、Windows Presentation Foundation (WPF) Designer for Visual Studio の機能プロバイダと機能コネクタを開発するときに編集コンテキストが果たす役割について説明します。機能プロバイダと機能コネクタの詳細については、「機能プロバイダと機能コネクタ」を参照してください。
編集コンテキスト : デザイナの現在の状態のキャプチャ
ビジュアルなデザイナでは、状態情報が使用されるに伴って蓄積されて膨大な量になります。状態は、現在の選択範囲にあるオブジェクトやマウス ボタンのクリック時の動作など、あらゆる種類のデザイン時の情報を表します。状態は、必要に応じて取得できるように、一括して格納される必要があります。EditingContext クラスは、デザイナの集約された状態リポジトリを表します。
[サービス]
サービスは、クラスの単一のインスタンスであり、動作を詳細に定義します。サービスは、デザイナの動作と実装を提供します。サービスは、コンテキストに作成されると、そのコンテキストが破棄されるまで存在します。サービスがコンテキストから消えることはありません。サービスには一貫したインスタンス値があるため、いつでもキャッシュできます。サービスを実装する方法を示すコード例については、「方法 : カスタム機能コネクタを作成する」を参照してください。
コンテキスト項目
コンテキスト項目とは、状態を格納する変更不可能なオブジェクトです。一部のコンテキスト項目では、コンテキスト内の状態に対して操作を実行できるメソッドも定義されています。
コンテキスト項目は、コンテキストに追加したりコンテキストから削除したりできます。コンテキスト項目は一時的なものですが、常に値を持ちます。特定のコンテキスト項目がコンテキスト内に存在しなくても、既定値が常に存在するため、null が返されることはありません。
サービスとは異なり、コンテキスト項目の値は変わることがあるので、コンテキスト項目はキャッシュしないでください。特定の型のコンテキスト項目が変更されたときに生成される変更コールバックをサブスクライブできます。
コンテキスト項目は不変ですが、新しいコンテキスト項目が既存のコンテキスト項目に置き換わることによって変化が表現されます。
サブスクリプション
サービスとコンテキスト項目にはマネージャがあります。サービス マネージャとコンテキスト項目マネージャは、基本的にはデータを格納するテーブルです。たとえば、サービス マネージャを使用して新しいサービスを発行できます。
サービス マネージャとコンテキスト項目マネージャは、サブスクリプション機構も提供します。これにより、特定のデータが存在する場合は、それがコードに通知されます。この通知は、コールバック デリゲートとして実装されます。サブスクリプションは、特定のサービスまたはコンテキスト項目の型が追加されたときに呼び出されるデリゲートです。
ComponentModel デザイナ フレームワークとの類似性
編集コンテキストは、System.ComponentModel.Design 名前空間の IDesignerHost インターフェイスおよび IServiceContainer インターフェイスと概念的に類似しています。詳細については、「Windows フォーム デザイナのフレームワークと WPF デザイナのフレームワークの比較」を参照してください。
参照
参照
Microsoft.Windows.Design.Services