Compartir a través de


Cómo: Agregar un tipo de propietario para una propiedad de dependencia

En este ejemplo se muestra cómo agregar una clase como un propietario de una propiedad de dependencia registrada para un tipo diferente. Al hacerlo, el lector y el sistema de propiedades de XAML en WPF pueden reconocer la clase como un propietario adicional de la propiedad. Al realizar la adición como propietario, la clase de adición puede proporcionar metadatos específicos del tipo.

En el ejemplo siguiente, StateProperty es una propiedad registrada por la clase MyStateControl. La clase UnrelatedStateControl se agrega como un propietario de StateProperty mediante el método AddOwner, utilizando en concreto la firma que permite utilizar nuevos metadatos para la propiedad de dependencia que existen en el tipo de adición. Observe que debe proporcionar descriptores de acceso common language runtime (CLR) para la propiedad de modo similar al ejemplo mostrado en Cómo: Implementar una propiedad de dependencia, así como volver a exponer el identificador de la propiedad de dependencia en la clase que se agrega como propietario.

Sin contenedores, la propiedad de dependencia seguiría funcionando desde la perspectiva de acceso mediante programación utilizando GetValue o SetValue. Sin embargo, suele ser conveniente imitar este comportamiento del sistema de propiedades mediante los contenedores de propiedades CLR. Los contenedores facilitan el establecimiento de la propiedad de dependencia mediante programación y permiten establecer las propiedades como atributos XAML.

Para averiguar cómo invalidar los metadatos predeterminados, vea Cómo: Invalidar metadatos en una propiedad de dependencia.

Ejemplo

  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); }
  }
}

Vea también

Conceptos

Propiedades de dependencia personalizadas

Información general sobre las propiedades de dependencia