Cómo: Implementar una propiedad de dependenciaHow to: Implement a Dependency Property

En este ejemplo se muestra cómo hacer una copia de seguridad de una propiedad de Common Language Runtime (CLR) con un DependencyProperty campo, con lo que se define una propiedad de dependencia.This example shows how to back a common language runtime (CLR) property with a DependencyProperty field, thus defining a dependency property. Si define sus propias propiedades y quiere que admitan muchos aspectos de la funcionalidad de Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF), incluidos los estilos, el enlace de datos, la herencia, la animación y los valores predeterminados, debe implementarlas como una propiedad de dependencia.When you define your own properties and want them to support many aspects of Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) functionality, including styles, data binding, inheritance, animation, and default values, you should implement them as a dependency property.

EjemploExample

En el ejemplo siguiente, primero se registra una propiedad de dependencia mediante una llamada al Register método.The following example first registers a dependency property by calling the Register method. El nombre del campo de identificador que se usa para almacenar el nombre y las características de la propiedad de dependencia debe ser el Name elegido para la propiedad de dependencia como parte de la Register llamada, anexado por la cadena literal Property .The name of the identifier field that you use to store the name and characteristics of the dependency property must be the Name you chose for the dependency property as part of the Register call, appended by the literal string Property. Por ejemplo, si registra una propiedad de dependencia con un Name de Location , el campo de identificador que defina para la propiedad de dependencia debe denominarse LocationProperty .For instance, if you register a dependency property with a Name of Location, then the identifier field that you define for the dependency property must be named LocationProperty.

En este ejemplo, el nombre de la propiedad de dependencia y su descriptor de acceso CLR es State ; el campo de identificador es StateProperty ; el tipo de la propiedad es Boolean ; y el tipo que registra la propiedad de dependencia es MyStateControl .In this example, the name of the dependency property and its CLR accessor is State; the identifier field is StateProperty; the type of the property is Boolean; and the type that registers the dependency property is MyStateControl.

Si no sigue este patrón de nomenclatura, es posible que los diseñadores no puedan notificar la propiedad correctamente y que ciertos aspectos de la aplicación de estilos del sistema de propiedades no funcionen según lo previsto.If you fail to follow this naming pattern, designers might not report your property correctly, and certain aspects of property system style application might not behave as expected.

También puede especificar los metadatos predeterminados de una propiedad de dependencia.You can also specify default metadata for a dependency property. En este ejemplo se registra el valor predeterminado de la propiedad de dependencia State para que sea false.This example registers the default value of the State dependency property to be false.

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

Para obtener más información sobre cómo y por qué implementar una propiedad de dependencia, en lugar de hacer una copia de seguridad de una propiedad de CLR con un campo privado, vea información general sobre las propiedades de dependencia.For more information about how and why to implement a dependency property, as opposed to just backing a CLR property with a private field, see Dependency Properties Overview.

Vea tambiénSee also