WPF编程宝典之依赖项属性(八)

依赖项属性是专门针对WPF创建的,但WPF库中的依赖项属性都使用普通的.NET属性过程(property procedure)进行了封装。

1.定义依赖项属性

注:只能为依赖对象(继承自DependencyObject的类)添加依赖项属性。幸运的是,WPF基础结构的关键部分中的大部分都间接继承自DependencyObject类,最明显的例子就是元素。

依赖项属性需要在多个类之间共享信息,所以必须将DependencyProperty对象定义为与其相关联的类的静态字段。并且按照约定,依赖项属性的字段的名称是在普通属性的末尾处加上单词“Property”。

1 public class FrameworkElement
2 {
3     public static readonly DependencyProperty MarginProperty;
4 }

说明:

通过单词“Property”可从实际属性的名称中区分出依赖项属性的定义。

字段的定义使用了readonly关键字,这意味着只能在FrameworkElement类的静态构造函数中对其进行设置。

1.2注册依赖项属性

定义DependencyProperty对象只是第一步,使用依赖项属性,还需要使用WPF注册创建的依赖项属性,并且注册需要在任何使用属性的代码之前完成,因此必须在与其关联的类的静态构造函数中进行。

WPF确保DependencyProperty对象不能被直接实例化,因为DependencyProperty类没有公有的构造函数,只能使用静态的DependencyProperty.Register()方法创建DependencyProperty实例。

声明依赖项属性:

1 public static readonly DependencyProperty AttachContentProperty = DependencyProperty.RegisterAttached(
2     "AttachContent", typeof(ControlTemplate),typeof(ControlAttachProperty), new FrameworkPropertyMetadata(null));
  • 属性名:AttachContent;
  • 属性使用的数据类型:ControlTemplate
  • 拥有该属性的类型:ControlAttachProperty
  • 一个具有附加属性设置的FrameworkPropertyMetadata对象,该要素是可选的
  • 一个用于验证属性的回调函数,该要素是可选的

Get依赖项属性:

1 public static ControlTemplate GetAttachContent(DependencyObject d)
2 {
3     return (ControlTemplate)d.GetValue(AttachContentProperty);
4 }

Set依赖项属性:

1 public static void SetAttachContent(DependencyObject obj, ControlTemplate value)
2 {
3     obj.SetValue(AttachContentProperty, value);
4 }
时间: 2024-12-23 12:19:33

WPF编程宝典之依赖项属性(八)的相关文章

WPF学习系列之二 (依赖项属性)

依赖属性;(dependency property)  它是专门针对WPF创建的,但是WPF库中的依赖项属性都使用普通的.NET属性过程进行了包装.从而可能通过常规的方式使用它们,即使使用他们的代码不理解WPF依赖项属性系统也是如此,使用旧技术包装新技术看起来有些奇怪,但这正是WPF能够改变基础组成部分,而不会扰乱.NET领域中其他部分的原因.三步:一:定义依赖项属性.public static readonly DependencyProperty MarginProperty;二:.在静态构

WPF 依赖项属性

WPF中的依赖项属性 “依赖项属性的用途在于提供一种方法来基于其他输入的值计算属性值”,只有定义属性为依赖项属性,这个属性才支持样式设置,数据绑定,继承,动画和默认值. 属性对应的字段必需是公有,静态,只读的,类型为DependencyProperty.即public static readonly DependencyProperty 字段名,同时字段的命名也有规范,属性名+Property,字段在定义时,通过DependencyProperty.Register来实注册属性(只有注册了,才能

【WPF学习】第十一章 理解依赖项属性

依赖项属性是标准.NET属性的全新实现——具有大量新增价值.在WPF的核心特性(如动画.数据绑定以及样式)中需要嵌入依赖项属性.WPF元素提供的大多数属性都是依赖项属性.到目前位置所见到的所有示例都用到了依赖项属性,但你可能还没有意识到这一点.这是因为依赖项属性的用法和普通属性的是相同的. 然而,依赖项属性并非普通属性.可能乐意认为依赖项属性是添加了一套WPF功能的常规属性(采用典型的.NET方式进行定义).从概念上讲,依赖项属性确实以这种方式工作,但它们的背后的实现方式并非如此.原因十分简单:

对WPF依赖项属性的理解

属性和事件是.NET抽象模型的核心部分, 而WPF中则用更高级的依赖项属性(Dependency Property)代替了原来.NET中的属性.依赖项属性主要应用于自定义元素中,用于为自定义元素注入自定义的属性. 以下是定义和注册依赖项属性的方法: //声明并注册依赖项属性 FoodProperty public static DependencyProperty FoodProperty =      DependencyProperty.Register("Food", typeo

WPF学习之依赖项属性

依赖项属性-依赖属性 Register(String, Type, Type) 使用指定的属性名称.属性类型和属性所在对象的类型.Register(String, Type, Type, PropertyMetadata) 使用指定的属性名称.属性类型.属性所在对象的类型和属性元数据注册依赖项属性.Register(String, Type, Type, PropertyMetadata, ValidateValueCallback) 使用指定的属性名称.属性类型.属性所在对象的类型.属性元数据

学习WPF——初识依赖项属性

入门 首先创建一个依赖项属性 然后绑定父容器的DataContext到这个依赖项的实例 接着绑定子元素的属性到依赖项属性(注意Button的Content属性) 程序最终的运行结果: 说明 首先是定义表示属性的对象,一个依赖项属性的对象必然是DependencyProperty的实例 这个实例必须始终保持可用,所以这里定义为静态字段 根据约定,依赖项属性的字段名称使用Property结尾,上面例子使用的是NameProperty 依赖项属性实例的创建工作必须在使用之前完成,所以要么在定义的时候即

WPF的依赖项属性

WPF的依赖项属性 属性与事件是.NET抽象模型的核心部分.WPF使用了更高级的依赖项属性(Dependency Property)功能来替换原来.NET的属性,实现了更高效率的保存机制,还添加了附加功能,如属性变更通知以及强制回调.属性值继承(在逻辑树中向下传播默认属性值的能力)以及属性有效性验证等.同时,依赖项属性也是WPF许多重要功能的基础,包括动画.数据绑定以及样式. 依赖项属性的使用基础 使用依赖项属性包括三个部分,定义依赖项属性:注册依赖项属性以及添加属性包装器. 定义依赖项属性,使

WPF编程宝典之控件模版(七)

将控件模版定义为资源,并使用StaticResource引用该资源 1 <Button Margin="10" Padding="5" Template="{StaticResource ButtonTemplaate}"> 2 A Simple Button with a Custom Template</Button> 控件模版的基本框架如下: 1 <Window.Resource> 2 <Contr

WPF编程宝典之路由事件(一)

路由事件是更具有传播能力的事件--它们可在元素树中向上冒泡和向下隧道传播,并且沿着传播路径被事件处理程序处理. 可通过传统的方式使用路由事件--通过关联具有正确签名的事件处理程序. 1.定义.注册和封装路由事件 与依赖项属性一样,路由事件由只读的静态字段表示,在静态构造函数中注册,并通过标准的.net事件定义进行封装. 1 public abstract class ButtonBase : ContentControl 2 { 3 //定义事件 4 public static readonly