方法: 依存関係プロパティを実装する

この例では、共通言語ランタイム (CLR) プロパティを DependencyProperty フィールドで補足し、依存関係プロパティを定義する方法を示します。 独自に定義したプロパティが Windows Presentation Foundation (WPF) のさまざまな機能、たとえばスタイル、データ バインディング、継承、アニメーション、既定値をサポートできるようにするには、そのプロパティを依存関係プロパティとして実装します。

次の例では、最初に Register メソッドを呼び出して依存関係プロパティを登録します。 依存関係プロパティの名前と特性を格納するときに使用する識別子フィールドの名前は、Register の呼び出しの一部として依存関係プロパティに対して選択した Name に、リテラル文字列 Property が付加されたものである必要がありますます。 たとえば、登録する依存関係プロパティの NameLocation ならば、この依存関係プロパティに対して定義する識別子フィールドの名前は LocationProperty とする必要があります。

この例では、依存関係プロパティとその CLR アクセサーの名前は State、識別子フィールドは StateProperty、プロパティの型は Boolean、依存関係プロパティを登録する型は MyStateControl です。

このパターンに従って名前が付けられていない場合は、定義したプロパティがデザイナーから正しく報告されず、プロパティ システムのスタイル適用の一部が予期したとおりに動作しなくなる可能性があります。

依存関係プロパティの既定のメタデータを指定することもできます。 State 依存関係プロパティの既定値を false として登録する例を次に示します。

public class MyStateControl : ButtonBase
{
  public MyStateControl() : base() { }
  public Boolean State
  {
    get { return (Boolean)this.GetValue(StateProperty); }
    set { this.SetValue(StateProperty, value); }
  }
  public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
    "State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false));
}
Public Class MyStateControl
    Inherits ButtonBase
  Public Sub New()
      MyBase.New()
  End Sub
  Public Property State() As Boolean
    Get
        Return CType(Me.GetValue(StateProperty), Boolean)
    End Get
    Set(ByVal value As Boolean)
        Me.SetValue(StateProperty, value)
    End Set
  End Property
  Public Shared ReadOnly StateProperty As DependencyProperty = DependencyProperty.Register("State", GetType(Boolean), GetType(MyStateControl),New PropertyMetadata(False))
End Class

単にプライベート フィールドを使用して CLR プロパティを補足するのではなく依存関係プロパティを実装する理由とその方法の詳細については、「依存関係プロパティの概要」を参照してください。

関連項目