1.依赖属性的效果
一旦规定视觉树上一个对象的fontsize属性,那么属于他的节点之下的所有对象都会沿袭这个属性,然而如果某个子节点明确的设定了自己的fontsize,就不会沿袭父节点的fontsize属性。fontsize这个属性是在Contorl中定义的,它具有默认值,默认的值优先级最低,从父节点上沿袭来的fontsize优先级比默认高,而直接对对象本身进行设置的优先级最高。类似fontsize属性的这类属性就是依赖属性
2.依赖属性的实现

 

  1. using System;
  2. using System.Text;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Input;
  6. using System.Windows.Media;
  7.  
  8. namespace LY.SetSpaceProperty
  9. {
  10. public class SpaceButton : Button
  11. {
  12. //传统的字段和属性
  13. string txt;
  14.  
  15. public string Text
  16. {
  17. set
  18. {
  19. txt = value;
  20. Content = SpaceOutText(txt);
  21. }
  22. get
  23. {
  24. return txt;
  25. }
  26. }
  27.  
  28. //依赖属性
  29. public static readonly DependencyProperty SpaceProperty;
  30.  
  31. public int Space
  32. {
  33. set
  34. {
  35. SetValue(SpaceProperty, value);
  36. }
  37. get
  38. {
  39. return (int)GetValue(SpaceProperty);
  40. }
  41. }
  42.  
  43. //用静态构造函数初始化
  44. static SpaceButton()
  45. {
  46. //定义元数据
  47. FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata();
  48. metadata.DefaultValue = 1;
  49. metadata.AffectsMeasure = true;
  50. metadata.Inherits = true;
  51. metadata.PropertyChangedCallback += OnSpacePropertyChanged;
  52.  
  53. // 注册到依赖属性
  54. SpaceProperty =
  55. DependencyProperty.Register("Space", typeof(int),
  56. typeof(SpaceButton), metadata,
  57. ValidateSpaceValue);
  58. }
  59.  
  60. //回调方法用于值的验证
  61. static bool ValidateSpaceValue(object obj)
  62. {
  63. int i = (int)obj;
  64. return i >= 0;
  65. }
  66.  
  67. //回调方法用于属性改变
  68. static void OnSpacePropertyChanged(DependencyObject obj,
  69. DependencyPropertyChangedEventArgs args)
  70. {
  71. SpaceButton btn = obj as SpaceButton;
  72. btn.Content = btn.SpaceOutText(btn.txt);
  73. }
  74.  
  75. string SpaceOutText(string str)
  76. {
  77. if (str == null)
  78. return null;
  79.  
  80. StringBuilder build = new StringBuilder();
  81.  
  82. foreach (char ch in str)
  83. build.Append(ch + new string(' ', Space));
  84.  
  85. return build.ToString();
  86. }
  87. }
  88. }

上面自定义了一个依赖属性,fontsize属性也是以类似上面的方式定义。

进一步深入参见:http://www.cnblogs.com/zhouyongh/archive/2009/09/10/1564099.html

         http://www.cnblogs.com/BillGan/archive/2011/05/26/2057859.html

         http://www.cnblogs.com/jimson/archive/2010/07/29/DependencyProperties.html

          http://www.cnblogs.com/HelloMyWorld/archive/2013/02/21/2920149.html

《WPF程序设计指南》读书笔记——第8章 依赖属性的更多相关文章

  1. css权威指南读书笔记-第10章浮动和定位

    这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...

  2. 《Javascript高级程序设计》读书笔记(1-3章)

    第一章 JavaScript简介 1.1 JavaScript简史 略 1.2 JavaScript实现 虽然 JavaScript 和 ECMAScript 通常都被人们用来表达相同的含义,但 Ja ...

  3. JavaScript权威指南读书笔记【第一章】

    第一章 JavaScript概述 前端三大技能: HTML: 描述网页内容 CSS: 描述网页样式 JavaScript: 描述网页行为 特点:动态.弱类型.适合面向对象和函数式编程的风格 语法源自J ...

  4. 《JavaScript高级程序设计》 - 读书笔记 - 第5章 引用类型

    5.1 Object 类型 对象是引用类型的实例.引用类型是一种数据结构,用于将数据和功能组织在一起. 新对象是使用new操作符后跟一个构造函数来创建的.构造函数本身就是一个函数,只不过该函数是出于创 ...

  5. 《JavaScript高级程序设计》 - 读书笔记 - 第4章 变量、作用域和内存问题

    4.1 基本类型和引用类型的值 JavaScript变量是松散类型的,它只是保存特定值的一个名字而已. ECMAScript变量包含两种数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据 ...

  6. 《Linux程序设计》--读书笔记---第十三章进程间通信:管道

    管道:进程可以通过它交换更有用的数据. 我们通常是把一个进程的输出通过管道连接到另一个进程的输入: 对shell命令来说,命令的连接是通过管道字符来完成的: cmd1    |     cmd2 sh ...

  7. 《Visual C++ 程序设计》读书笔记 ----第8章 指针和引用

    1.&取地址:*取内容. 2.指针变量“++”“--”,并不是指针变量的值加1或减1,而是使指针变量指向下一个或者上一个元素. 3.指针运算符*与&的优先级相同,左结合:++,--,* ...

  8. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  9. 《Linux内核设计与分析》第六周读书笔记——第三章

    <Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...

随机推荐

  1. C++/CLR Sqlite初探

        error C2491: "acosh": 不允许 dllimport 函数 的定义     asinh": 不允许 dllimport 函数 的定义     a ...

  2. iOS的APP验证版本更新方法

    一个老项目没有集成自动检测及提示用户更新新版本的功能,自己在网上查资料捣鼓出自己的方法,可能比较粗陋,希望大家多多指导,我们的项目的版本号是X.X.X的格式,所以直接把字符串转换成float类型的值无 ...

  3. 移动互联网(APP)产品设计的经验分享【转】

    随着移动互联网的发展,越来越多的Web产品开始布局移动端,因此最近经常碰到PM们在交流讨论移动APP产品的设计.我从事移动互联网已经有一年多了,通过不断的学习和实践也积累了一些心得,今天整理并分享一下 ...

  4. linux云计算集群架构学习笔记:rhel7基本命令操作

     1-3-RHEL7基本命令操作 1.1Linux终端介绍 Shell提示符 Bash Shell基本语法. 1.2基本命令的使用:ls.pwd.cd. 1.3查看系统和BIOS硬件时间. 1.4 L ...

  5. 解析$.grep()源码及透过$.grep()看(两次取反)!!的作用

    先上jquery源码: grep: function( elems, callback, inv ) { var retVal, ret = [], i = 0, length = elems.len ...

  6. HDU 1016 Prime Ring Problem (DFS)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. AutoCAD 2014 win 32bit破解版

    AutoCAD 2014 win 32bit破解版 百度云盘:http://pan.baidu.com/s/1nu2u6Hr

  8. HTML5와 CSS3 적용기

    HTML5의 DTD 선언 <!DOCTYPE html>  HTML5의 인코딩 선언 <meta charset="utf-8">  그리고나서는 새로 ...

  9. 【ANT】ant概述

    ANT是集软件测试.编译.打包.部署等自动化构建工具,是Apache软件基金会JAKARTA目录中的一个子项目,具有以下优点: 跨平台性 ANT是由Java语言编写,具有很好的跨平台性. 操作简单 A ...

  10. Native App, Hybrid App, Web App对比

    Native App,Hybrid App和Web App简介 目前基本所有的移动互联网app可以分为三类:Native App,Hybrid App和Web App. Native App是基于智能 ...