更新 : 2007 年 11 月
機能拡張を使用して Windows Presentation Foundation (WPF) Designer for Visual Studio をカスタマイズするときに、カスタム コントロールを作成することがよくあります。ユーザーが通常どおりにプロパティの値を設定できるようにすると同時に、コントロールのプロパティが実行時とデザイン時で異なる動作をするように設定する必要がある場合があります。たとえば、ユーザーがコントロールの表示プロパティを false に設定できる場合でも、デザイン時にはそのコントロールを表示する必要があります。
このトピックでは、カスタム コントロールのプロパティのデザイン時動作を変更する手順について説明します。一連の操作手順の詳細な例については、「チュートリアル : デザイン時のプロパティ動作の変更」を参照してください。
![]() |
---|
この方法を使用した場合、デザイナ内でのプロパティの動作が、XAML ビュー内のプロパティの値と一致しません。XAML ビューは、デザイン時にユーザーが入力した値を表示します。XAML ビュー内の値は、プロパティの実行時の動作を表します。 |
コントロールがデザイン時のものかどうかを判断し、その結果に応じてプロパティを設定する場合は、「方法 : カスタム コントロールがデザイン時のものか実行時のものかを判断する」を参照してください。
カスタム DesignModeValueProvider の作成
この手順では、カスタムの DesignModeValueProvider クラスを作成します。TranslatePropertyValue メソッドで、変更するプロパティの新しい動作のカスタム ロジックを追加します。この変更は、デザイナにのみ影響します。実行時には、プロパティはユーザーが設定したとおりに動作します。
カスタム DesignModeValueProvider を作成するには
プロジェクトで、次のアセンブリへの参照を追加します。
- Microsoft.Windows.Design.Extensibility
カスタム コントロール プロジェクトに新しいクラスを追加し、クラスを編集して、DesignModeValueProvider からの継承を指定します。結果は次のようになります。
Public Class YourCustomDesignModeValueProvider Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider End Class
class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider { }
クラスにコンストラクタを追加します。コンストラクタで、キャプチャするプロパティを識別します。
Public Sub New() 'Properties.Add(<The Property To Change Goes Here>) 'More properties can go here. End Sub
public YourCustomDesignModeValueProvider() { //Properties.Add(<The Property To Change Goes Here>); //More properties can go here. }
クラスの TranslatePropertyValue メソッドをオーバーライドします。ここで、デザイン時のプロパティの新しい動作を指定します。
Public Overrides Function TranslatePropertyValue(ByVal identifier As Microsoft.Windows.Design.Model.PropertyIdentifier, ByVal value As Object) As Object 'If identifier.DependencyProperty Is <Property To Change> Then ' ' Custom logic goes here. 'End If 'More custom logic for more properties can go here. Return MyBase.TranslatePropertyValue(identifier, value) End Function
public override object TranslatePropertyValue(Microsoft.Windows.Design.Model.PropertyIdentifier identifier, object value) { //if (identifier.DependencyProperty == <The Property To Change>) //{ // Custom logic goes here. //} //More custom logic for more properties can go here. return base.TranslatePropertyValue(identifier, value); }
メモ :
この手順では、2 種類のプロパティを処理する 1 つの DesignModeValueProvider を作成します。複数の DesignModeValueProvider オブジェクトを作成して、異なるプロパティを処理することもできます。
カスタム コントロールへの DesignModeValueProvider のアタッチ
この手順では、FeatureAttribute 属性を使用して、カスタム コントロールに DesignModeValueProvider をアタッチします。
カスタム コントロールに DesignModeValueProvider をアタッチするには
カスタム コントロールのクラス宣言を探します。結果は次のようになります。
Public Class YourCustomControl
class YourCustomControl
クラス宣言に FeatureAttribute 属性を追加し、前の手順で作成した DesignModeValueProvider を指定します。
<Microsoft.Windows.Design.Features.Feature(GetType(YourCustomDesignModeValueProvider))> _ Public Class YourCustomControl
[Microsoft.Windows.Design.Features.Feature(typeof(YourCustomDesignModeValueProvider))] class YourCustomControl
メモ :
メタデータ ストアを使用して、カスタム コントロールに DesignModeValueProvider をアタッチすることもできます。詳細については、「メタデータ ストア」および「方法 : メタデータ ストアの使用方法」を参照してください。