[Silverlight]关于DependencyProperty 的几点说明
1. 什么是DependencyProperty ?
通过 CLR 属性可以支持样式设置、数据绑定、动画和默认值,而这些功能也可通过将其作为依赖项属性实现来获得。依赖项属性是通过调用 DependencyProperty..::..Register 方法向 Silverlight 属性系统注册并由 DependencyProperty 标识符字段标识的属性。依赖项属性只能由 DependencyObject 类型使用,但 DependencyObject 在 Silverlight 类层次结构中的级别很高,因此,Silverlight 中的大多数可用于用户界面和演示的类都可能支持依赖项属性。
2.什么时候实现DependencyProperty 属性
属性成为依赖项属性并不始终必要或适当,具体取决于您的需要。有时,使用私有字段支持属性的典型方法便能满足要求。但是,只要您希望属性支持以下一种或多种 Silverlight 属性系统功能,就应将您的属性作为依赖项属性实现:
-
您希望可在样式中设置此属性。
-
您希望此属性支持数据绑定。
-
您希望此属性支持经过动画处理的值。
-
您希望 Silverlight 属性系统在属性系统本身、环境或用户执行的操作或者读取并使用样式而更改了属性以前的值时进行报告。您的属性可以指定在每次属性系统确定属性值已被明确更改时将调用的回调方法。
3.如何实现DependencyProperty
为使属性成为依赖项属性,必须在由 Silverlight 属性系统维护的属性存储区中注册该属性,并且必须为其指定一个唯一标识符,以用作属性系统后续操作的限定符。这些操作可能是内部操作,也可能是调用属性系统 API 的您自己的代码。若要注册属性,请在类体中(在类的内部,但在任何成员定义的外部)调用 DependencyProperty.Register 方法。DependencyProperty.Register 方法调用也提供此标识符字段作为返回值。通常在其他成员定义的外部执行 DependencyProperty.Register 调用的原因在于:使用此返回值可以分配和创建一个类型为 DependencyProperty 的 public static readonly 字段,以作为类的一部分。此字段将成为依赖项属性的标识符。
示例代码:
{
public static readonly DependencyProperty MyDefinedImageProperty = DependencyProperty.Register(
"MyDefinedImage",
typeof(Image),
typeof(MyDefinedImage),
null
);
public Image MyDefinedImage
{
get { return (Image)GetValue(MyDefinedImageProperty ); }
set { SetValue(MyDefinedImageProperty , value); }
}
}