方法: 依存関係プロパティの所有者の種類を追加するHow to: Add an Owner Type for a Dependency Property

この例では、別の型に登録されている依存関係プロパティの所有者としてクラスを追加する方法を示します。This example shows how to add a class as an owner of a dependency property registered for a different type. WPFWPF これXAMLXAMLにより、リーダーとプロパティシステムは、クラスをプロパティの追加所有者として認識できるようになります。By doing this, the WPFWPF XAMLXAML reader and property system are both able to recognize the class as an additional owner of the property. 所有者として追加すると、追加クラスで型固有のメタデータを提供できるようになります。Adding as owner optionally allows the adding class to provide type-specific metadata.

次の例ではStateProperty 、はMyStateControlクラスによって登録されるプロパティです。In the following example, StateProperty is a property registered by the MyStateControl class. クラスUnrelatedStateControlは、 AddOwnerメソッドを使用して、 StatePropertyそれ自体をの所有者として追加します。特に、追加する型に存在する依存関係プロパティの新しいメタデータを許可する署名を使用します。The class UnrelatedStateControl adds itself as an owner of the StateProperty using the AddOwner method, specifically using the signature that allows for new metadata for the dependency property as it exists on the adding type. 依存関係プロパティの実装」の例に示すように、プロパティの共通言語ランタイム (CLR) アクセサーを提供する必要があることに注意してください。また、所有者として追加されるクラスの依存関係プロパティの識別子を再公開することもできます。Notice that you should provide common language runtime (CLR) accessors for the property similar to the example shown in the Implement a Dependency Property example, as well as re-expose the dependency property identifier on the class being added as owner.

ラッパーがない場合でも、依存関係プロパティはまたはGetValue SetValueを使用したプログラムによるアクセスの観点から機能します。Without wrappers, the dependency property would still work from the perspective of programmatic access using GetValue or SetValue. ただし、通常は、このプロパティシステムの動作を CLR プロパティラッパーと並列にする必要があります。But you typically want to parallel this property-system behavior with the CLR property wrappers. ラッパーを使用すると、依存関係プロパティをプログラムで設定しやすくなり、プロパティを属性とXAMLXAMLして設定できるようになります。The wrappers make it easier to set the dependency property programmatically, and make it possible to set the properties as XAMLXAML attributes.

既定のメタデータをオーバーライドする方法については、「依存関係プロパティのメタデータのオーバーライド」を参照してください。To find out how to override default metadata, see Override Metadata for a Dependency Property.

Example

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
public class UnrelatedStateControl : Control
{
  public UnrelatedStateControl() { }
  public static readonly DependencyProperty StateProperty = MyStateControl.StateProperty.AddOwner(typeof(UnrelatedStateControl), new PropertyMetadata(true));
  public Boolean State
  {
    get { return (Boolean)this.GetValue(StateProperty); }
    set { this.SetValue(StateProperty, value); }
  }
}
Public Class UnrelatedStateControl
    Inherits Control
  Public Sub New()
  End Sub
  Public Shared ReadOnly StateProperty As DependencyProperty = MyStateControl.StateProperty.AddOwner(GetType(UnrelatedStateControl), New PropertyMetadata(True))
  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
End Class

関連項目See also