WPF Designer for Visual Studio は、WPF コントロールおよび Silverlight コントロールにカスタムのデザイン環境を実装するための高度なプラットフォームを提供します。 WPF デザイナーの機能拡張 API は、Visual Studio 2008 での最初のリリースから大幅に進化しました。 以下のセクションでは、Visual Studio 2010 の WPF デザイナーの機能拡張の変更点について説明します。
Silverlight および複数のプラットフォーム バージョンのサポート
Visual Studio 2008 では、コントロールのデザイン時の対象は、最新バージョンの WPF プラットフォームだけでした。 Visual Studio 2010 では、このサポートが WPF 3.5、WPF 4.0、Silverlight 3、今後リリースされるプラットフォームなどの、複数のプラットフォームでのデザイン時サポートに拡張されました。 これらすべてのプラットフォームで同じ機能拡張 API が存在するため、コントロールのデザイン時設計者は、1 つのエクスペリエンスを作成し、各プラットフォームのコントロールのランタイム間で共有することができます。
Expression Blend のサポート
Visual Studio の同じ機能拡張のインターフェイスを使用して、コントロールのデザイン時実装を Expression Blend に対して行うことができるようになりました。 2 つの編集環境のデザイン時エクスペリエンスを、別々に提供するか、共有のものとして提供するかを選択できます。
メタデータの登録
機能拡張 API の最も大きな違いは、IRegisterMetadata インターフェイスが IProvideAttributeTable インターフェイスに置き換えられたことです。 この変更と複数プラットフォームのサポートによって、機能拡張 API が大幅に変わりました。 既存のコントロールの Visual Studio 2008 へのデザイン時実装は、Visual Studio 2010 では読み込まれません。
さらに、Visual Studio 2010 では、ProvideMetadataAttribute 属性を使用して、デザイン時のアセンブリがデザイナーにメタデータを提供することを示します。
新しい拡張ポイント
新しい機能拡張 API では、次のような新しいデザイン時エクスペリエンスもサポートされます。
プロパティ ウィンドウでは、カテゴリ エディターからのモデルへのアクセスがサポートされます。 この変更と、共通プロパティのカテゴリ一覧上部への昇格によって、コントロール作成者がプロパティ ウィンドウで豊富な作成機能を提供できるようになりました。
カスタム コントロールとの相対位置で装飾を簡単に配置できるようにするための、新しい AdornerPanel ユーティリティ メソッドがサポートされます。
Visual Studio や Expression Blend などの異なるデザイン ツール間でデザイン時の実装を共有するための、新しいプログラミング モデルがサポートされます。
複数の対象フレームワーク間でデザイン時の実装を共有するための、新しいプログラミング モデルがサポートされます。
Visual Studio 2008 と Visual Studio 2010 の機能拡張の比較
次の表に、Visual Studio 2008 と Visual Studio 2010 でのデザイン時のカスタム操作の作成における相違点を示します。
Visual Studio 2008 |
Visual Studio 2010 |
---|---|
デザイン時の型を登録するには、IRegisterMetadata インターフェイスを実装し、MetadataStore クラスを使用する必要があります。 |
デザイン時の型を登録するには、IProvideAttributeTable インターフェイスを実装し、CreateTable メソッドを呼び出す必要があります。 |
アセンブリ レベルの属性を追加する必要はありません。 |
デザイン時のアセンブリを ProvideMetadataAttribute 属性でマークする必要があります。 |
デザイナーの型をグラフィカルな要素と関連付けるには、GetImage メソッドを NewItemFactory で使用します。これにより、さまざまな要素の型を返すことができます。 |
デザイナーの型をアイコンと関連付けるには、GetImageStream メソッドを使用してビットマップを返します。 ビットマップのみがサポートされます。 |
モデルのプロパティにアクセスするには、次のように依存関係プロパティを使用します。 ModelProperty backgroundProperty = adornedControlModel.Properties[Control.BackgroundProperty]; |
モデルのプロパティにアクセスするには、次のように依存関係プロパティの名前を使用します。 ModelProperty backgroundProperty = adornedControlModel.Properties["Background"]; さらに、型と文字列の組み合わせである PropertyIdentifier を定義できます。 PropertyIdentifier は、簡易名検索では不十分な場合に、添付プロパティと一緒に使用されます。 |
レイアウト空間と描画空間とを区別するには、AdornerCoordinateSpaces クラスを使用します。 |
AdornerCoordinateSpaces クラスは使用されません。 |
コンテンツとの相対位置で装飾の位置を指定するには、AdornerPlacementCollection クラスを使用します。 |
コンテンツとの相対位置で装飾の位置を指定するには、SetAdornerHorizontalAlignment、SetAdornerVerticalAlignment、SetAdornerMargin の各メソッドを使用します。 AdornerPlacementCollection クラスは、下位互換性のために残されています。 |