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

 

using System;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media; namespace LY.SetSpaceProperty
{
public class SpaceButton : Button
{
//传统的字段和属性
string txt; public string Text
{
set
{
txt = value;
Content = SpaceOutText(txt);
}
get
{
return txt;
}
} //依赖属性
public static readonly DependencyProperty SpaceProperty; public int Space
{
set
{
SetValue(SpaceProperty, value);
}
get
{
return (int)GetValue(SpaceProperty);
}
} //用静态构造函数初始化
static SpaceButton()
{
//定义元数据
FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata();
metadata.DefaultValue = 1;
metadata.AffectsMeasure = true;
metadata.Inherits = true;
metadata.PropertyChangedCallback += OnSpacePropertyChanged; // 注册到依赖属性
SpaceProperty =
DependencyProperty.Register("Space", typeof(int),
typeof(SpaceButton), metadata,
ValidateSpaceValue);
} //回调方法用于值的验证
static bool ValidateSpaceValue(object obj)
{
int i = (int)obj;
return i >= 0;
} //回调方法用于属性改变
static void OnSpacePropertyChanged(DependencyObject obj,
DependencyPropertyChangedEventArgs args)
{
SpaceButton btn = obj as SpaceButton;
btn.Content = btn.SpaceOutText(btn.txt);
} string SpaceOutText(string str)
{
if (str == null)
return null; StringBuilder build = new StringBuilder(); foreach (char ch in str)
build.Append(ch + new string(' ', Space)); return build.ToString();
}
}
}

上面自定义了一个依赖属性,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

最新文章

  1. Hadoop日常维护系列——Hadoop添加删除节点
  2. Bootstrap CSS概览代码文字标注篇
  3. flex 布局 初次接触这个好使又不是特别好用的布局方法
  4. Python 爬虫学习 网页图片下载
  5. ubuntu下opencv2.4.9安装测试
  6. android99 拍照摄像
  7. oracle for update和for update nowait(for update wait)的区别
  8. php与文件操作
  9. css grid学习材料整理
  10. 纳税服务系统【信息发布管理、Ueditor、异步信息交互】
  11. C# - 获取windows系统特殊文件夹路径
  12. 图解Redis之数据结构篇——链表
  13. TensorFlow学习笔记:共享变量
  14. 关于x210开发板和主机、虚拟机ping通问题
  15. https协议的接口测试
  16. 奇妙的证明 —— 0! = 1(a^0=1)
  17. Hbuild开发App入门
  18. 内部存储 openFileInputStream openFileOutputStream
  19. MySQL常用命令操作
  20. Python数据采集处理分析挖掘可视化应用实例

热门文章

  1. 在SSIS 的 64 位版本中不支持 Excel 连接管理器
  2. python(3)-lambda表达式
  3. Mysql 死锁相关操作
  4. [改善Java代码]断言绝对不是鸡肋
  5. 【数值方法,水题】UVa 10341 - Solve It
  6. hihocoder 1237 Farthest Point
  7. 初识Less(2015年05月23日)
  8. 小议jQuery中的事件
  9. Jersey(1.19.1) - Building URIs
  10. CSS之照片翻转