如何:实现依赖属性

本示例演示如何使用 DependencyProperty 字段来支持公共语言运行时 (CLR) 属性,从而定义一个依赖属性。 定义自己的属性并需要其支持 Windows Presentation Foundation (WPF) 功能的诸多方面(包括样式、数据绑定、继承、动画和默认值)时,应将其作为依赖属性实现。

示例

下面的示例通过调用 Register 方法首次注册依赖属性。 用于存储依赖属性名称和特征的标识符字段名称必须是作为 Register 调用的一部分为依赖属性选择的 Name,并追加字符串 Property。 例如,如果使用 LocationName 注册一个依赖属性,则为依赖属性定义的标识符字段必须命名为 LocationProperty

在此示例中,依赖属性的名称及其 CLR 访问器均为 State;标识符字段为 StateProperty;属性类型为 Boolean;注册依赖属性的类型为 MyStateControl

如果不遵循此命名模式,则设计器可能无法正确地报告属性,而且属性系统样式应用程序的某些方面可能不会以预期的方式工作。

还可为依赖属性指定默认元数据。 此示例将 State 依赖属性的默认值注册为 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

若要深入了解实现依赖属性而非仅使用私有字段支持 CLR 属性的原因及其实现方式,请参阅依赖属性概述

另请参阅