对于WPF了解的不多,特别是新添加一个控件时对里面的元素操作时就比较麻烦。
比如:对于一个TextBlock控件text属性修改的时候,就比较麻烦。
一般的方法是把控件实例完以后再引用TextBlock控件给其赋值,这种方法虽说可以解决问题,但是觉得不是很好,与winform处理的方式相似,既然wpf比winform新,那么winform这种繁琐的问题,必然会被wpf较为简洁的方法替代。
我自己对于WPF的依赖属性是属于知识匮乏的级别,但是通过其他人写的代码,照葫芦画瓢竟然能解决问题,瞬间让我膨胀起来,必须记下这个使用方法,一来加强记忆,便于以后更深入的研究。二来,分享原本就是一件快乐的事,能帮助到人,那是更快乐的事。
声明一个 public static readonly的DependencyProperty类型变量,留一个问题为什么要是 public static readonly类型???
public static readonly DependencyProperty RecipeUnitNameProperty = DependencyProperty.Register(
RecipeUnitPropertyName,
typeof(String),
typeof(uc_recipeStatus),
new UIPropertyMetadata("",new PropertyChangedCallback(RecipeUnitNamePropertyChanged))
);
一般都会在变量名后面加上Property以此后缀作为其他人区别普通属性的规范。
在静态构造函数中向属性系统注册依赖属性,并获取对象引用。依赖属性是通过调用DependencyProperty.Register静态方法创建,该方法需要传递一个属性 名称,这个名称非常重要,在定义控件Style和Template的时候,Setter的Property属性填入的值就是注册依赖属性时使用的名称。propertyType指明了依赖属性实际的类型,ownerType指明了是哪个类注册了此依赖属性,最后typeMetadata存放了一些依赖属 性的元信息,包括依赖属性使用的默认值,还有属性值发生变更时的通知函数(抄)
完成了一个依赖属性的注册,那么我们怎样才能对这个依赖属性进行读写呢?当然是提供一个依赖属性的实例化包装属性,通过这个属性来实现具体的读写操作。和CLR属性不同,依赖属性不是直接对私有变量的操纵,而是通过GetValue()和SetValue()方法来操作属性值的,可以使用标准的.NET属性定义语法进行封装,使依赖属性可以像标准属性那样来使用(抄)
public String RecipeUnitName
{
get
{
return (String)GetValue(RecipeUnitNameProperty);
}
set
{
SetValue(RecipeUnitNameProperty, value);
}
}
使用的时候就像使用其他属性一样赋值就可以啦,终于水完一篇了