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