本文是出自:http://www.cnblogs.com/xiongpq/archive/2010/06/29/1767905.html
感觉很好,所以收藏。
概述:
Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩展公共语言运行时 (CLR) 属性的功能。这些服务通常统称为 WPF 属性系统。由 WPF 属性系统支持的属性称为依赖项属性。
依赖项属性提供用来扩展属性功能的功能,
最常用的莫过于“数据绑定”功能,依赖项属性可以通过数据绑定来引用值。数据绑定通过特定的标记扩展语法(在 XAML 中)或 Binding
对象(在代码中)来工作。使用数据绑定,最终属性值的确定将延迟到运行时,在运行时,将从数据源获取属性值,并可实现动态更新。
本文目的:
介绍依赖属性应用场景,及自定义依赖属性方法。
正文:
什么是依赖属性
依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值。依赖项属性是通过调用 Register 方法(或
RegisterReadOnly)在 WPF 属性系统中注册,并通过 DependencyProperty 标识符标示属性。
依赖项属性只能由继承自 DependencyObject 类的类型使用,但 DependencyObject 在 WPF
类层次结构中的级别很高,因此,WPF 中的大多数可用类都支持依赖项属性。
何时应实现依赖项属性
将所有的属性都设置为依赖属性并不总是正确的解决方案,具体取决于其应用场景。有时,使用私有字段实现属性的典型方法便能满足要求。MSDN中给出了下面几种应用依赖属性的场景:
1. 希望可在样式中设置属性。
2. 希望属性支持数据绑定。
3. 希望可使用动态资源引用设置属性。
4. 希望从元素树中的父元素自动继承属性值。
5. 希望属性可进行动画处理。
6. 希望属性系统在属性系统、环境或用户执行的操作或者读取并使用样式更改了属性以前的值时报告。
7. 希望使用已建立的、WPF 进程也使用的元数据约定,例如报告更改属性值时是否要求布局系统重新编写元素的可视化对象。
目前我使用最多的场景是前三条,下面是一个典型的依赖属性在数据绑定上的应用场景:
界面上有A、B两个图片,大小一样,我们需要在改变图片A大小的时候,同时也改变图片B的大小,让他们的大小总保持一致。按照通常的做法我们应该怎么做?
我们需要在图片A的SizeChanged事件中添加处理图片B的方法。把图片A的Size赋给图片B。这么一个简单的功能需要这么一段代码来做是不是有点繁琐,若此类需求更多,则你需要处理的事件将更多。
然而使用依赖属性,可以用下面三句话实现此功能:
imageB.DataContext = imageA;
imageB.SetBinding(Image
.WidthProperty, "Width"
);
imageB.SetBinding(Image
.HeightProperty, "Height"
);
怎么样,够简洁吧!这段话大致的意思就是:
1. 将ImageB的参与数据绑定时的数据上下文为ImageA,即ImageB上绑定的数据都到ImageA上找;
2. 将ImageB的宽高通过SetBinding的方法绑定到"Width"及"Height"两个属性上。这两个属性的值在哪里找,就在ImageB的DataContext中找,在这里就是ImageA的"Width"及"Height"。
这样就将ImageA和ImageB的"Width"及"Height"绑定在一起,其中一个图片的"Width"及"Height"发生改变时,另一个图片的Size也会相应的发生改变。
如何自定义依赖属性
在类上实现属性时,只要该类派生自 DependencyObject,便可以选择使用 DependencyProperty 标识符来标示属性,从而将其设置为依赖属性。其语法如下:
public static
DependencyProperty
TextProperty =
DependencyProperty
.Register("Text"
, //属性名称
typeof
(string
), //属性类型
typeof
(TestDependencyPropertyWindow
), //该属性所有者,即将该属性注册到那个类上
new
PropertyMetadata
(""
)); //属性默认值
public string
Text
{
get
{ return
(string
)GetValue(TextProperty); }
set
{ SetValue(TextProperty, value
); }
}
可以看到其与普通属性的主要区别在于:
1. 字段必须为static,且类型为DependencyProperty,字段名需遵守命名约定,即后缀为Property;
2. 字段的修饰符须设置为Public,否则在外部不能通过SetBinding方法,绑定此属性的值;
3. 字段的值通过DependencyProperty.Register来设置,各参数的说明详见代码中的说明;
4. 设置属性值时,通过SetValue、GetValue而不是Set、Get。
通过上面的方法我们便在CustomSape类上自定义了一个依赖属性“Text”,然后我们便可以像使用系统自带的依赖属性一样,使用这个属性。
总之,依赖属性是WPF的一个重要特性,可以用简单的几句话,实现原来Winform实现起来非常繁琐的功能。具体什么时候使用依赖属性、什么时候使用普通属性,就要看具体的使用情况,并参照MSDN给出的7个应用场景。
分享到:
相关推荐
在Windows Presentation Foundation(WPF)中,依赖属性(Dependency Property)是实现数据绑定(Data Binding)的核心机制之一。依赖属性允许UI元素与数据源之间建立动态的连接,从而实现视图与模型之间的自动同步...
WPF 依赖属性 DependencyProperty C# WPF 依赖属性 DependencyProperty C# WPF 依赖属性 DependencyProperty C# WPF 依赖属性 DependencyProperty C#
### WPF依赖属性内部机制详解 #### 一、引言 WPF(Windows Presentation Foundation)是一种用于构建桌面应用程序的技术框架,其核心理念之一是“数据驱动UI”。在WPF中,依赖属性(Dependency Property)是实现...
**WPF依赖项属性详解与示例** 在Windows Presentation Foundation(WPF)中,依赖项属性(Dependency Property)是框架的核心特性之一,它为UI元素提供了数据绑定、样式设定、动画支持以及事件处理等强大功能。依赖...
依赖属性详解,有源码 //传入ownerType增加Owner public DependencyProperty AddOwner(Type ownerType) { return AddOwner (ownerType, null); } //增加所有者,根据ownerType和typeMetadata public ...
**WPF 依赖属性与附加属性详解** 在Windows Presentation Foundation(WPF)中,依赖属性(Dependency Property)和附加属性(Attached Property)是两个核心概念,它们为数据绑定、属性继承以及自定义控件提供了...
在WPF中,依赖属性(Dependency Property)是其核心特性之一,它为属性提供了丰富的功能,如数据绑定、动画、样式和模板支持。正确理解和使用依赖属性对于深入学习WPF至关重要。 依赖属性的概念可能对初学者来说...
而WPF依赖属性很好地解决了这个问题,它内部实现使用哈希表存储机制,对多个相同控件的相同属性的值都只保存一份 .支持多种提供对象:可以通过多种方式来设置依赖属性的值。可以配合表达式、样式和绑定来对依赖属性...
**WPF(Windows Presentation Foundation) 是微软.NET框架中的一部分,用于构建富客户端应用程序。它提供了丰富的用户界面元素和...通过分析源码,可以更深入地理解WPF依赖属性系统的工作原理及其在实际开发中的应用。
在Windows Presentation Foundation (WPF)中,依赖属性是框架的核心特性之一,它们为WPF对象提供了数据绑定、动画、样式和模板等高级功能的基础。这个压缩包文件“WpfDpDemo”很可能是用于演示如何使用依赖属性以及...
- 为了保持WPF依赖属性的正确性,开发者需要在调用Win32 API后手动同步这些属性的值,或者在调用API之前先保存并恢复这些值。 - 可以使用`Dispatcher.Invoke`或`Dispatcher.BeginInvoke`确保在正确的线程上下文中...
依赖项属性是Windows Presentation Foundation (WPF)框架中的核心特性之一,它极大地扩展了.NET Framework公共语言运行时(CLR)属性的功能。WPF属性系统通过依赖项属性支持数据绑定、动画、样式、模板等高级功能,使...
本示例"wpf用户组件创建依赖属性demo"将指导我们如何为自定义用户组件创建依赖属性,依赖属性是WPF中一种强大的特性,它提供了数据绑定、属性更改通知和动画支持等功能。 依赖属性的核心在于它是WPF中的属性系统,...
示例描述:本章介绍WPF中的依赖属性和事件路由特性。 AttachedEvents 使用WPF的附加事件。 CaptureMouseDemo 捕捉鼠标示例。 CreateWPFDependencyProperty 创建WF中的依赖属性。 CustomRoutedEvent ...
在WPF(Windows Presentation Foundation)开发中,依赖属性(Dependency Property)是实现数据绑定的关键机制。依赖属性允许控件的属性与其他对象的数据源保持同步,从而实现数据驱动的用户界面。接下来,我们将...
依赖属性是WPF中的一个核心特性,它允许UI元素的属性与数据源直接绑定,实现了属性值的自动更新。依赖属性通过注册机制提供,可以实现属性的继承、回调、改变通知等功能。开发者可以通过`DependencyProperty....
在Windows Presentation Foundation (WPF) 中,依赖属性是框架的核心特性之一,用于实现数据绑定、属性更改通知和其他高级UI功能。这个压缩包“WPF源码:只读依赖属性.rar”很可能包含一个示例项目,演示了如何创建...
**WPF基础知识绑定、样式、依赖属性教程** WPF(Windows Presentation Foundation)是微软.NET Framework中的一个组件,用于构建丰富的、交互式的用户界面。在WPF中,数据绑定、样式和依赖属性是三个核心概念,它们...
VB.NET做的一个WPF的Demo,做了个控件。像是Windows图标一样.图片加文字,移动到图片上,图片会放大。这个demo也说明了如何建立一个自定义的属性,并把UserControl中的控件属性绑定到自己定义的属性中。