Silverlight的依赖属性与附加属性

好久没写Silverlight了,依赖属性(Dependency Property)和附加属性 (Attached Property)这两个算是很基础的知识都不是很记得了。写一写,当做 一下笔记吧。

CLR属性 与 依赖属性

CLR属性我们非常熟悉了,在DotNet编程中随处可见。最简单最常见的属性访 问器就是直接操纵类的私有成员,如下:

public class Person
{
   private String _name;
   public string Name
   {
     get { return _name; }
     set { _name = value; }
   }
}

C#3.0对这种常见的写法提供了“自动属性”这一特性,方便了偶等这些懒惰 的码农。

public class Person
{
   public string Name { get; set; }
}

这两种写法是等价的,都是需要设立一个实例级的私有变量作为属性访问器的 持久存储。这对于我们非UI应用来说没什么。因为第一,我们一般不会创建太多 类实例;第二,一个类的属性通常不会很多,加几个私有变量不会增加系统负担 。但是这两个理由对于UI应用程序来说恰恰不成立。

在很多UI应用中,我们经常会创建很多类实例,成千上万个实例在UI系统中是 很普遍的事情。同时,UI类通常会包含大量的属性供设计人员使用,例如背景颜 色,前景颜色,字体,边距等等,这些属性在绝大多数情况下会保持默认值,如 果为每个实例都建立这么多的私有变量来存储UI属性的值,势必会造成极大的浪 费,对系统负担的开销也是不小。

鉴于以上提到的问题,设计一个高效的属性存储系统对于UI应用程序的开发是 非常重要的。因此Silverlight引入了“依赖属性(DependencyProperty)”。

采用键值对替代成员变量作为属性内部存储

传统CLR属性,一个属性对应一个私有变量,UI元素的属性那么多,创建过多 的私有变量不是一件简单的事情,况且大多数属性只会用到默认值。因此 Silverlight使用键值对的形式来存放那些用户显式设置的属性(称为Local Value本地值),没有设置的属性就不存。那属性的默认值存放在哪?既然各个实 例的默认值都一样(不然也不叫默认值了),那么直接存放到静态成员变量上就 行了。这也就大大提高了存储的效率。

时间: 2024-10-28 05:09:17

Silverlight的依赖属性与附加属性的相关文章

WPF学习之依赖属性和附加属性

依赖属性(Dependency Property) .NET Framework 3.0引入了一个新的属性类型叫依赖属性, WPF,WF都在使用依赖属性用来实现样式化,数据绑定等.我们更多的使用依赖属性是为了让父元素的属性值在逻辑树上慢慢的传递到其子元素中,从而可以在整个可是父元素的逻辑子元素中共享属性值.WF就是依靠依赖属性来在工作流中的各Activity间传递属性值的. 所以,依赖属性内建的传递变更通知的能力是其最大特征. 如果你想让属性在一个包含内容子控件树的整个逻辑控件树中都有效并共享值

深入剖析依赖属性(WPF/Silverlight核心)(上)

一. 摘要 前几篇我们讲了WPF的一些基本知识,但是始终没有接触最核心的概念,那么从这篇文章开始的下面几篇文 章中,我们会分别深入讨论一下依赖属性.路由事件.命令和绑定等相关概念,希望这几篇文章对大家能有所 帮助.由于自己才疏学浅且是对这些技术的使用总结和心得体会,错误之处在所难免,怀着技术交流的心态, 在这里发表出来,所以也希望大家能够多多指点,这样在使一部分人受益的同时也能纠正我的错误观点,以便 和各位共同提高. 二. 本文提纲 · 1.摘要 · 2.本文提纲 · 3.比这篇文章更重要的东西

WPF基础到企业应用系列7深入剖析依赖属性(WPF/Silverlight核心)

一. 摘要 首先圣殿骑士很高兴这个系列能得到大家的关注和支持,这个系列从七月份开始到现在才第七篇,上一篇发布是在8月2日,掐指一算有二十多天没有继续更新了,最主要原因一来是想把它写好,二来是因为最近几个月在筹备"云计算之旅"系列,所以一再推迟了发布进度.之前一直都没有想过要录制视频,主要的原因还是怕自己知识有限,从而误导他人,所以前几次浪曦和51CTO邀请录制视频,我都以工作忙.公司内部培训需要时间和自己有待提高等理由委婉的拒绝了,说实在的,自己也知道自己还有很多地方有待提高,还需要向

重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试

原文:重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试 [源码下载] 重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 控件基础 DependencyProperty - 依赖属性 AttachedProperty - 附加属性 控件的继

Windows 8 Store Apps学习(16) 控件基础: 依赖属性等等

控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试 介绍 重新想象 Windows 8 Store Apps 之 控件基础 DependencyProperty - 依赖属性 AttachedProperty - 附加属性 控件的继承关系 路由事件和命中测试 示例 1.开发一个具有 DependencyProperty 和 AttachedProperty 的自定义控件 MyControls/themes/generic.xaml <ResourceDictionary x

vs2010-Silverlight中依赖属性设置出错

问题描述 Silverlight中依赖属性设置出错 环境:Visual Studio 2010 Silverlight应用程序 实现类似微软人立方的人物关系图效果 但是出现如下错误:未在类型"Button"中找到属性"CircleButtonWidth1" . 求大神给看一下,这个怎么改才可以?(附MainPage.xaml和MainPage.xaml.cs如下:) 首先是MailPage.xaml: ** xmlns="http://schemas.mi

明晰Silverlight中的依赖属性

在c#中--得益于c#3.0中的自动属性--我们可以十分轻松的通过如下代码创建一个叫做 "AuthorName"的属性. public string AuthorName { get; set; } 上面的代码就是我们熟悉的CLR属性,我们可以很方便的读/取这个属性的值.不过在 silverlight的世界中如果你想做更多更牛的事情,CLR属性就显得有些力不从心了.它们包 括--动画.数据绑定.样式/模板等等. 因此,微软在WPF中提出了依赖属性(Dependency Property

在silverlight里自定义一个控件,在自定义控件类里面定义依赖属性出错。

问题描述 在silverlight里自定义一个控件,在自定义控件类里面定义依赖属性出错. 在silverlight里自定义一个控件ReplicationEventComboBox继承ComboBox,在ReplicationEventComboBox类里面定义依赖属性TextProperty. 其中ReplicationEventComboBox中 private TextBlock _text; 字段在方法OnApplyTemplate()中被赋值 var text = this.GetTem

Silverlight:Dependency Property(依赖属性)学习笔记

1.定义依赖属性:           #region Text        public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(ImageButton), new PropertyMetadata(default(string), new PropertyChangedCallback(TextPrope