明晰Silverlight中的依赖属性2011-04-13 博客园 紫色永恒在c#中--得益于c#3.0中的自动属性--我们可以十分轻松的通过如下代码创建一个叫做 “AuthorName”的属性。public string AuthorName { get; set; }上面的代码就是我们熟悉的CLR属性,我们可以很方便的读/取这个属性的值。不过在 silverlight的世界中如果你想做更多更牛的事情,CLR属性就显得有些力不从心了。它们包 括--动画、数据绑定、样式/模板等等。因此,微软在WPF中提出了依赖属性(Dependency Property,以下简称DP)的概念并将其 延伸至Silverlight平台。在这篇文章我将介绍DP在Silverlight的定义和使用。要了解一件新事物最简单的方式就是找出一样我们熟悉的,与要介绍的新玩意相似的东西 来做对比:将上文的AuthorName属性定义为DP的方式是如下这样的public string AuthorName {
get { return (string)GetValue(AuthorNameProperty); }
set { SetValue(AuthorNameProperty, value); }
}
代码片段1public static readonly DependencyProperty AuthorNameProperty =
DependencyProperty.Register("AuthorName", typeof(string), typeof (AuthorTextField), new PropertyMetadata(""));
代码片段2哇!完成一个DP的定义需要这么多的代码,kidding me?先别急,下面我们就来了解一下这些代码的含义。首先,要构造一个DP,我们需要准备两样事通过CLR属性包装将DP用代码片段1中所示代码包装起来后,我们便可以轻松的像CLR属性一样设置和获取DP 的值。因为这个包装用的就是标准的CLR声明方式,只是他的get和set中有一些简单的逻辑而 已罢了。这里我们需要分别使用GetValue和SetValue方法获取或这是一个叫做 AuthorNameProperty属性的值(没错,这是个DP。Silverlight中约定DP要以-Property词缀 结尾)。定义依赖属性(即本文中的AuthorNameProperty)现在来看代码片段2,这里我们将其分成若干部分来解释:public static readonly DependencyProperty AuthorNameProperty