依赖属性

依赖属性基础

  依赖属性是具有借用其他对象的数据的能力,具有依赖属性的对象为依赖对象。WPF所有UI都是依赖对象。

只有依赖属性才能做为Bingding的源或目标。

DependencyObject具有GetValue()和SetValue()两个方法。

自定义一个依赖对象

public class Student3: DependencyObject//必须继承DependencyObject才能成为一个依赖对象

{

// 定义依赖属性标准格式

public static readonly DependencyProperty NameProperty =

DependencyProperty.Register("Name", typeof(string), typeof(Student3), new PropertyMetadata("无名"));

//Name是依赖属性NameProperty的包装器,对外暴漏被使用

public string Name//在VS中输入propdp再按两次tab可以快捷输入

{

get { return (string)GetValue(NameProperty); }

set { SetValue(NameProperty, value); }

}

//使其也像UI一样有个SetBingding方法

public BindingExpressionBase SetBingding(DependencyProperty dp, BindingBase binding)

{

return BindingOperations.SetBinding(this, dp, binding);

}

}

调用:

public partial class property : Window

{

//一定要定义在外面,要不然textBox1改变了textBox2也不会自动

Student3 su = new Student3();

public property()

{

InitializeComponent();

su.SetBingding(Student3.NameProperty, new Binding("Text") { Source = textBox1 });

 //Student3没为实现INotifyPropertyChanged接口同样也可以得到通知

textBox2.SetBinding(TextBox.TextProperty, new Binding("Name") { Source = su  });

}

}

其实依赖属性的值并不是保存在NameProperty 中,而是通过CLR属性名和宿主类型名称从全局的Hashtable中检索或保存的。

附加属性基础

附加属性本质还是依赖属性。一个对象在不同环境后才具有的属性就叫附加属性。

如人类Human在学校有班级属性,在公司就有部门的属性。

<Label x:Name="label" Grid.Row="1"/>

定义以及使用例子:

public class Human : DependencyObject

{

//一定要继承DependencyObject成为依赖对象

}

public class School : DependencyObject

{

// 标准定义格式,与信赖属性差不多。 使用“propa”+两次tab可以快捷生成

public static readonly DependencyProperty GradeProperty =

DependencyProperty.RegisterAttached("Grade", typeof(string), typeof(School), new PropertyMetadata("无班级"));

public static string GetGrade(DependencyObject obj)

{

return (string)obj.GetValue(GradeProperty);

}

public static void SetGradeP(DependencyObject obj, string value)

{

obj.SetValue(GradeProperty, value);

}

}

调用:

Human human = new Human();

School.SetGrade(human, "五年级");

string grade = School.GetGrade(human);

//可以得到grade的值为五年级

时间: 2024-10-18 19:27:28

依赖属性的相关文章

WPF 依赖属性概念

理解依赖属性 在 WPF 中变成相比较于 传统 Windows Forms 变成发生了较大的改变. 属性现在以一组服务的形式提供给开发人员. 这组服务就叫做属性系统. 由 WPF 属性系统所支持的属性成为依赖属性. 依赖属性的概念 WPF 在依赖属性中提供了标准属性无法提供的功能, 特性如下: 决定属性值: 依赖属性的属性值可以在运行时有其他元素或者是其他信息所决定, 决定的过程具有一个优先次序. 自动验证或变更通知: 依赖属性哟一个自定的回调方法, 当属性值变更时被执行, 这个回调能验证新的值

WPF依赖属性详解

WPF依赖属性详解 WPF 依赖属性 英文译为 Dependency Properties,是WPF引入的一种新类型的属性,在WPF中有着极为广泛的应用,在WPF中对于WPF Dependency Properties 的使用贯穿样式的使用,数据绑定,动画等等,在刚刚接触Dependency Properties的时候可能觉得有些奇怪,但是,当你了解他要解决的问题的时候,你可能就不觉得奇怪了.Dependency Properties第一个要解决的问题就是控件的属性共享问题,由于大部分的WPF控

WPF——依赖属性(Dependency Property)

1.什么是依赖属性 依赖属性是一种可以自己没有值,并且通过Binding从数据源获得值(依赖在别人身上)的属性,拥有依赖属性的对象被称为“依赖对象”. 依赖项属性通过调用 Register 方法(或 RegisterReadOnly)在 WPF 属性系统中注册,并通过 DependencyProperty 标识符标示属性. 依赖项属性只能由继承自 DependencyObject 类的类型使用,在WPF中大部分的类都可以支持依赖属性. 2.DependencyObject和DependencyP

Windbg调试WPF的依赖属性

?? 我们用wndbg调试时,很多时候需要查看某个控件的依赖属性值. 比如:我们查看DataGridColumnHeader的Content依赖属性   1.我们用到的windbg的命令有:!do, !da -details, .formats  2.利用!do查看依赖对象的成员变量, 找到具体依赖属性的地址 0:000> !do 00000000039a71d8 Name:        System.Windows.Controls.Primitives.DataGridColumnHead

线程同步基础之使用非依赖属性实现同步

当使用synchronized关键字来保护代码块时,必须把对象引用作为传入参数.通常情况下,使用this关键字来引用执行方法所属的对象,也可以使用其他的对象对其进行引用.一般来说,这些对象就是为这个目的而创建的.例如,在类中有两个非依赖属性,它们被多个线程共享,你必须同步每一个变量的访问,但是同一时刻只允许一个线程访问一个属性变量,其他某个线程访问另一个属性变量. 这里我们演示电影院售票场景.这个范例模拟了有两个屏幕和两个售票处的电影院.一个集票处卖出的一张票,只能用于其中一个屏幕,不能同时用于

WPF快速入门系列(2)——深入解析依赖属性

一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己开始更新WPF系列.尽管最近看到一篇WPF技术是否老矣的文章,但是还是不能阻止我系统学习WPF.今天继续分享WPF中一个最重要的知识点——依赖属性. 二.依赖属性的全面解析 听到依赖属性,自然联想到C#中属性的概念.C#中属性是抽象模型的核心部分,而依赖属性是专门基于WPF创建的.在WPF库实现中,依赖属性使用普通的C#属性进行了包装,使得我们可以通过和以前一样的方式来使用依赖属性,但我们必须明确,在WPF中我们大多数

WPF依赖属性1

属性是.net的核心部分,是每个.net程序员都必须熟悉的特性,但是在wpf中引入了依赖属性的概念,依赖属性和原来属性的定义完全不一样,wpf通过依赖属性改变了元素属性的定义方式,依赖属性为wpf的数据绑定.动画以及样式,都起到了关键的作用,所以理解依赖属性,对于理解wpf至关重要. C#的普通属性的定义,我们十分熟悉,他是一个成员变量,增加了get/set 方法实现的一种访问器,基本定义如下: class Example {     private string name;     publi

WPF系列 —— 控件添加依赖属性

依赖属性的概念,用途 ,如何新建与使用.本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用. 先上TimePicker的一个效果图. 概念 和 用途:依赖属性是对传统.net 属性的一种封装,使一个传统.net属性支持 WPF 中的 数据绑定.动画.样式 等功能. 新建:任意代码代码文件中 ,输入 propdp 再双击tab键.生成如下的代码块. MyProperty: 依赖属性的名称: ownerclass: 当前依赖属性绑定的所有类; new PropertyMeta

WPF学习(三) - 依赖属性和附加属性

学习WPF时,我在看一本叫做“深入浅出WPF”的书.整整20页都在讲依赖性性和附加属性,反复看了几遍居然还是不懂,真是郁闷. 上一篇中WPF绑定的例子,其实已经用到了依赖属性. // 作为被绑定的目标类,必须从DependencyObject派生 // 这样定义的类才能满足SetBinding方法的第一个参数的类型要求 // 还要额外定义一个依赖属性,用来满足SetBinding方法的第二个参数要求 // 用DependencyObject派生方法GetValue和SetValue,控制属性的存