方法 : 依存関係プロパティの所有者の種類を追加する
この例では、異なる型に対して登録された依存プロパティの所有者としてクラスを追加する方法を示します。 これにより、WPF の XAML リーダーとプロパティ システムの両方が、プロパティの追加の所有者としてクラスを認識できるようになります。 さらに所有者として追加することで、追加するクラスが型固有のメタデータを提供できるようになります。
次の例では、StateProperty は MyStateControl クラスによって登録されるプロパティです。 UnrelatedStateControl クラスは、AddOwner メソッドを使用し、追加する型に存在する依存関係プロパティの新しいメタデータで使用可能なシグネチャを明示的に使用して、StateProperty の所有者として自分自身を追加します。 このとき、「方法 : 依存関係プロパティを実装する」の例に示すようなプロパティのcommon language runtime (CLR) アクセサーを提供し、さらに、所有者として追加されるクラスに対する依存プロパティ識別子を再公開する必要がある点に注意してください。
ラッパーがなくても、プログラムによるアクセスという観点からは、依存プロパティは GetValue または SetValue を使用して動作できます。 ただし通常は、このプロパティシステム動作を CLR プロパティ ラッパーと合わせる必要があります。 ラッパーを使用すると、プログラムでの依存関係プロパティの設定が容易になり、プロパティを XAML 属性として設定できるようになります。
既定のメタデータをオーバーライドする方法については、「方法 : 依存関係プロパティのメタデータをオーバーライドする」を参照してください。
使用例
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
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
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 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); }
}
}