DependencyProperty属性介绍
1 DependencyProperty从属属性
1. 从属属性要定义为静态.为了在外部可以绑定,最好定义为Public
2. 从属属性实际上是取代了正常属性的存值变量
3. 如果从属属性所对应的正常属性是实例成员,操作属性值时的表现形式为实例成员
4. 只有继承System.Workflow.ComponentModel.DependencyObject的类才能应用定义DependencyProperty
5. 要使用System.Workflow.ComponentModel.DependencyProperty的静态方法注册属性
6. 注册从属属性的类中必须存在名为[注册名Property]的静态 DependencyProperty变量
7. 定义从属属性不毕然要定义一个与之对应的属性,注册从属属性也可以在当前类外部进行
1.1 Register向类注册从属属性
System.Workflow.ComponentModel.DependencyProperty类的静态方法
Creates new instances of the DependencyProperty possessing specific initialization conditions.
|
重载1 |
public static DependencyProperty Register(string name, Type propertyType, Type ownerType); |
|
参数1:注册的从属属性的名子,该值赋给Name属性 参数2:属属性的数据类型,该值赋给PropertyType属性 参数3:再将将从属性性注册到的类,该值赋给OwnerType属性 |
|
|
重载2 |
public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata); |
|
参数1:注册的从属属性的名子,该值赋给Name属性 参数2:属属性的数据类型,该值赋给PropertyType属性 参数3:再将将从属性性注册到的类,该值赋给OwnerType属性 参数4:从属性性的默认值,该值赋给DefaultMetadata属性 |
|
public Activity1: SequenceActivity { //从属属性A public static DependencyProperty BProperty = DependencyProperty.Register("B", typeof(string), typeof(Activity1)); public string B { get{ return ((string)(base.GetValue(Activity1.BProperty)));} set{ base.SetValue(Activity1.BProperty, value); } } //从属属性B public static DependencyProperty AProperty = DependencyProperty.Register("A", typeof(string), typeof(Activity1),new PropertyMetadata("love")); public string A { get{return ((string)(base.GetValue(Activity1.AProperty)));} set{base.SetValue(Activity1.AProperty, value);} } } |
|
说明: 对应的属性名,与注册的从属属性名,可以不一样,但最好一样 静态的从属属性与注册的从属属性名的格式必须是: [名Property] 与 [名] 的格式,如: BProperty = DependencyProperty.Register("B", AProperty = DependencyProperty.Register("A" |
1.2 得到从属属性的基本信息
System.Workflow.ComponentModel.DependencyProperty类的实例属性
|
类.从属属性.DefaultMetadata |
得到从属性性的默认值 |
|
类.从属属性.Name |
得到从属属性的名子 |
|
类.从属属性.OwnerType |
得到该从属属性所属的类 |
|
类.从属属性.PropertyType |
得到从属属性的数据类型 |
例
|
System.Console.WriteLine(Activity1.AProperty.DefaultMetadata.DefaultValue); System.Console.WriteLine(Activity1.AProperty.IsAttached); System.Console.WriteLine(Activity1.AProperty.IsEvent); System.Console.WriteLine(Activity1.AProperty.Name); System.Console.WriteLine(Activity1.AProperty.OwnerType); System.Console.WriteLine(Activity1.AProperty.PropertyType); System.Console.WriteLine(Activity1.AProperty.ValidatorType); |
1.3 FromName 从指定类中返回指定名称的从属属性
System.Workflow.ComponentModel.DependencyProperty类的静态方法
|
public static DependencyProperty FromName(string propertyName, Type ownerType); 返回值:从属属性对象 参数1:从属属性的名称,即Name的字符串 参数2:要操作的包含从属属性的类 |
|
例 DependencyProperty p = DependencyProperty.FromName("A", typeof(Activity1)); System.Console.WriteLine(p.DefaultMetadata.DefaultValue); System.Console.WriteLine(p.IsAttached); System.Console.WriteLine(p.IsEvent); System.Console.WriteLine(p.Name); System.Console.WriteLine(p.OwnerType); System.Console.WriteLine(p.PropertyType); System.Console.WriteLine(p.ValidatorType); |
1.4 FromType 得到指定类的全部从属属性列表
System.Workflow.ComponentModel.DependencyProperty类的静态方法
|
public static IList<DependencyProperty> FromType(Type ownerType); 返回值:从属属性集合 参数1:要操作的包含从属属性的类 |
|
System.Collections.Generic.IList<DependencyProperty> pls; pls = DependencyProperty.FromType(typeof(Activity1)); foreach (DependencyProperty temp in pls) { System.Console.WriteLine(temp.Name); } |
1.5 从属属性可以在外部注册
|
public class w : System.Workflow.ComponentModel.DependencyObject { private static DependencyProperty pProperty; } |
|
DependencyProperty p = DependencyProperty.Register("p", typeof(string), typeof(w)); w obj = new w(); obj.SetValue(p, "123"); object v = obj.GetValue(p); System.Console.WriteLine(v); |
2 使用从属属性
2.1 GetValue、SetValue 通过从属属性读取、设置属性值
System.Workflow.ComponentModel.DependencyObject的实例方法
|
public void SetValue(DependencyProperty dependencyProperty, object value); 实例.SetValue(类.从属属性,值) |
|
public object GetValue(DependencyProperty dependencyProperty); 值 = 实例.SetValue(类.从属属性) |
|
private Activity1 activity11; activity11 = new Activity1(); activity11.SetValue(Activity1.AProperty, "值"); object v = activity11.GetValue(Activity1.AProperty); |
2.2 代码方式的从属属性的绑定
1. 使用 System.Workflow.ComponentModel.ActivityBind类进行绑定
|
Name:要绑定Activity对象实例的Name Path:要绑定的Activity对象属性 |
2. 使用从属属性所在Activity对象的SetBinding方法进行绑定
|
从属属性所在Activity对象.SetBinding(Activity对象类.从属属性,ActivityBind对象) |
3. 使用从属属性所在Activity对象的的RemoveProperty方法移除绑定
|
从属属性所在Activity对象.RemoveProperty(Activity对象类.从属属性) |
代码
|
System.Workflow.ComponentModel.ActivityBind activitybind1 = new System.Workflow.ComponentModel.ActivityBind(); activitybind1.Name = "Workflow3"; //要绑定Activity对象实例的Name activitybind1.Path = "S"; //要绑定的Activity对象属性 //进行绑定 this.activity11.SetBinding(Activity1.AProperty,activitybind1); //移除绑定 //this.activity11.RemoveProperty(Activity1.AProperty); |
注:使用绑定方式,而只是简单赋值,直接对属性赋值即可,也可用SetValue的方法对属性所对应的从属属性赋值
2.3 使用设计器进行绑定
略
2.4 配置文件的从属属性绑定
|
<ns0:Activity1 x:Name="activity11" A="{ActivityBind Workflow3,Path=S}" B="wxwinter" C="{x:Null}" /> |
|
绑定使用 从属属性 = "{ActivityBind 要绑定Activity对象实例的Name,Path=要绑定的Activity对象属性 }" |
|
不绑定,直接赋值 从属属性="值" 或 从属属性="{x:Null}" |
|
也可以使用如下方式绑定 <ns0:Activity1x:Name="activity11"B="wxwinter"C="{x:Null}" > <ns0:Activity1.A> <ActivityBindName="Workflow3"Path="S" /> </ns0:Activity1.A> </ns0:Activity1 |
2.5 绑定方式说明
1. 不能在当前类中即定义DependencyProperty,又对DependencyProperty进行绑定,要解决这种情况,最好是在父类中定义DependencyProperty,在子类中进行绑定
2. 绑定后,数据会同步
3. 绑定方式
子主动绑父
父主动绑子
子直接去绑子
子与子之间通过一个中介实现绑定
DependencyProperty属性介绍的更多相关文章
- DIV+CSS布局中主要CSS属性介绍
Float: Float属性是DIV+CSS布局中最基本也是最常用的属性,用于实现多列功能,我们知道<div>标签默认一行只能显示一个,而使用Float属性可以实现一行显示多个div的功能 ...
- WPF中监视DependencyProperty的变化
WPF中监视DependencyProperty的变化 周银辉 尽管一个类会提供很多事件,但有时候还是显得不够,比如说前两天我就以为WPF的ListBox控件会有ItemsSourceChange ...
- [Silverlight]监听指定控件(FrameworkElement)的依赖属性(DependencyProperty)的更改
前言 转载请注明出处:http://www.cnblogs.com/ainijiutian 最近在silverlight项目使用Telerik的控件,遇到一个问题.就是使用RadBusyIndicat ...
- WPF依赖属性DependencyProperty
写在之前: 依赖属性算是WPF醉醉基础的一个组成了.平时写代码的时候,简单的绑定很轻松,但是遇到复杂的层次比较多的绑定,真的是要命.所以,我觉得深刻认识依赖属性是很有必要的.本篇只是个人学习的记录,学 ...
- location.hash属性介绍
location.hash属性介绍 例如URL: http://wwww.a.com/index#rhythmk 通过location.hash 我们将获取到 #rhythmk. 默认浏览器会滚动至i ...
- Autocomplete:属性介绍、firefox中文支持问题
如有问题,请前往 http://www.cnblogs.com/dreamowneryong/p/4953911.html 原文评论交流 一,属性介绍 * minChars (Number) 在触发a ...
- DependencyProperty深入浅出
写这篇心得之前,看到博友一句话:需求是推动发展的原动力. 说得好,说的棒,说到了点子上,说到了心里去: 好我们开始 最初的世界是简单的,甚至比单细胞动物还简单: 普通属性定义 public class ...
- .NET: WPF DependencyProperty
DependencyProperty and DependencyObject is the core of WPF data binding. We can use this two class t ...
- WPF中的DependencyProperty存储方式详解
前言 接触WPF有一段时间了,之前虽然也经常使用,但是对于DependencyProperty一直处于一知半解的状态.今天花了整整一下午将这个概念梳理了一下,自觉对这个概念有了较为清晰的认识,之前很多 ...
随机推荐
- Thinkphp5笔记七:设置错误页面①
设置网站的错误提示页面,也是一个很重要的环节. 一.空操作 在当前控制器里面增加E_empty操作 public function _empty(){ $this->error('方法不存在') ...
- Rx与Async Task的简单对比
有关Reactive Extensions的介绍可见https://rx.codeplex.com/,总的来说,你可以当它是又一个异步编程的框架,它以观察者模式实现了对数据流的的“订阅”.一个列表,一 ...
- 18 如何使用go来采集windows的基本硬件信息后发送到CMDB的服务器上
preface 之前我使用python写了cmdb采集的脚本,打包成exe的二进制文件后放在windows上执行,也达到了预期的效果. 但是最近部门要上open-falcon监控体系,每个服务器都要安 ...
- QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)
本文使用QGLWidget来绘制各种三维基本图形,包括立方体.圆柱体.圆锥.球体.圆环等等,涉及包括基本绘制以及上色.纹理.旋转等操作. 使用的软件版本:QT5.12 + QT Creater4.8. ...
- win7 、2008 提示Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法
在安装控件过程中出现提示Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法 1. 点 ...
- gtk界面设计
一.GTK基本 #include <gtk/gtk.h> int main( int argc, char *argv[]) { GtkWidget *window; /*初始化整个GTK ...
- 正则 /\D/g
onKeyUp="this.value=this.value.replace(/\D/g,'');"红色的是什么意识 /g是什么意思 ----------------------- ...
- 创建Maven创建src/main/java提示反复
建立好一个Maven项目后.假设Java Resources资源文件下没有src/main/java目录,而且在手动创建这个文件时提示"已存在文件". 这说明,在这个项目配置中已经 ...
- Eclipse------maven使用Maven build编译web项目显示" javax.servlet.http 不存在"
缺少javax.servlet包 解决方法: 引入下面代码即可 <project> <dependencies> <dependency> <groupId& ...
- Java位运算加密
创建一个类,通过位运算中的”^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,再与那个指定的 ...