Postupy: Přidání typu vlastníka pro vlastnost závislosti

Tento příklad ukazuje, jak přidat třídu jako vlastníka vlastnosti závislosti zaregistrované pro jiný typ. Tímto způsobem dokáže čtečka WPF XAML a systém vlastností rozpoznat třídu jako dalšího vlastníka vlastnosti. Přidání jako vlastníka volitelně umožňuje přidání třídy poskytnout metadata specifická pro typ.

V následujícím příkladu StateProperty je vlastnost registrovaná MyStateControl třídou. Třída UnrelatedStateControl se přidá jako vlastník StateProperty metody AddOwner , konkrétně pomocí podpisu, který umožňuje nová metadata pro vlastnost závislosti, jak existuje u typu přidání. Všimněte si, že byste měli zadat přístupové objekty CLR (Common Language Runtime) pro vlastnost podobnou příkladu uvedenému v příkladu Implementace vlastnosti závislosti a také znovu zveřejnit identifikátor vlastnosti závislosti na třídě, která je přidána jako vlastník.

Bez obálky by vlastnost závislosti stále fungovala z hlediska programového přístupu pomocí GetValue nebo SetValue. Obvykle ale chcete paralelně provádět toto chování systému vlastností pomocí obálky vlastností CLR. Obálky usnadňují programové nastavení vlastnosti závislosti a umožňují nastavit vlastnosti jako atributy XAML.

Informace o přepsání výchozích metadat najdete v tématu Přepsání metadat pro vlastnost závislosti.

Příklad

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

Viz také