Sdílet prostřednictvím


Postup: 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, aby přidávající třída poskytla metadata specifická pro typ.

V následujícím příkladu je StateProperty vlastnost registrovaná třídou MyStateControl. Třída UnrelatedStateControl se přidá jako vlastník StateProperty pomocí metody AddOwner, a to konkrétně pomocí podpisu, který umožňuje definovat nová metadata pro vlastnost závislosti tak, jak existují na typu, ke kterému se přidávají. Všimněte si, že byste pro vlastnost měli poskytnout přístupové objekty CLR (Common Language Runtime) podobně jako v příkladu Implementovat vlastnost závislosti a také znovu zveřejnit identifikátor vlastnosti závislosti ve třídě, která je přidává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é