WPF系列(一)依赖项属性

来源:互联网 发布:花与剑 js 编辑:程序博客网 时间:2024/05/29 02:35

依赖项属性是标准.NET属性的全新实现——具有大量新增价值。在WPF的核心特性中需要嵌入依赖性属性。WPF元素提供的大多数属性都是依赖项属性。相对于创建依赖项属性,大多数情况下只是使用他们。当我们自定义控件时,会创建依赖属性。。现在通过自定义调音台控件介绍WPF中依赖属性的知识。
自定义控件调音台SingnalLight,实现功能(示例程序摘自 鱼哥的地盘)

  • 接收来自外部的范围0~100的数值
  • 实时显示接收数值
  • 列表内容
  • 数值范围0~50显示绿色,50~85显示黄色,85~100显示红色,没有数值显示褐色
  • 可在父控件上拖拽该控件
    自定义SingnalLight效果图

以下是其中一段定义依赖属性的代码

   public int ValueA        {            get { return (int)GetValue(ValueAProperty); }            set { SetValue(ValueAProperty, value); }        }        // Using a DependencyProperty as the backing store for ValueA.  This enables animation, styling, binding, etc...        public static readonly DependencyProperty ValueAProperty =            DependencyProperty.Register("ValueA", typeof(int), typeof(SingnalLight), new PropertyMetadata(0));

第一步定义表示属性的对象,它是DependencyProject类的实例。
第二步是注册依赖属性。需要提供以下几个参数

    //        // 摘要:        //     使用指定的属性名称、属性类型和所有者类型注册依赖项属性。        //        // 参数:        //   name:        //     要注册的依赖项对象的名称。在所有者类型的注册命名空间内,名称必须是唯一的。        //        //   propertyType:        //     属性的类型。        //        //   ownerType:        //     正注册依赖项对象的所有者类型。        //        // 返回结果:        //     一个依赖项对象标识符,应使用它在您的类中设置 public static readonly 字段的值。然后,在以后使用该标识符引用依赖项对象,用于某些操作,例如以编程方式设置其值,或者获取元数据。        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]        public static DependencyProperty Register(string name, Type propertyType, Type ownerType);        //        // 摘要:        //     使用指定的属性名称、属性类型、所有者类型和属性元数据注册依赖项属性。        //        // 参数:        //   name:        //     要注册的依赖项对象的名称。        //        //   propertyType:        //     属性的类型。        //        //   ownerType:        //     正注册依赖项对象的所有者类型。        //        //   typeMetadata:        //     依赖项对象的属性元数据。        //        // 返回结果:        //     一个依赖项对象标识符,应使用它在您的类中设置 public static readonly 字段的值。然后,在以后使用该标识符引用依赖项对象,用于某些操作,例如以编程方式设置其值,或者获取元数据。        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]        public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata);        //        // 摘要:        //     使用指定的属性名称、属性类型、所有者类型、属性元数据和属性的值验证回调来注册依赖项属性。        //        // 参数:        //   name:        //     要注册的依赖项对象的名称。        //        //   propertyType:        //     属性的类型。        //        //   ownerType:        //     正注册依赖项对象的所有者类型。        //        //   typeMetadata:        //     依赖项对象的属性元数据。        //        //   validateValueCallback:        //     对回调的引用,除了典型的类型验证之外,该引用还应执行依赖项对象值的任何自定义验证。        //        // 返回结果:        //     一个依赖项对象标识符,应使用它在您的类中设置 public static readonly 字段的值。然后,在以后使用该标识符引用依赖项对象,用于某些操作,例如以编程方式设置其值,或者获取元数据。        public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata, ValidateValueCallback validateValueCallback);

另外有个小技巧,在VS中输入propdp会直接生成创建依赖项属性的代码,再通过简单的修改即可。

本文地址:http://blog.csdn.net/shi_tou_ge/article/details/50881023
2016年03月13日完成

0 0