WPF系列一依赖项属性

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

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

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

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 ownerType,PropertyMetadata typeMetadata);
        //
        // 摘要:
        // 使用指定的属性名称属性类型、所有者类型、属性元数据和属性的值验证回调来注册依赖项属性
        //
        // 参数:
        // name:
        // 要注册的依赖项对象的名称
        //
        // propertyType:
        // 属性的类型。
        //
        // ownerType:
        // 正注册依赖项对象的所有者类型。
        //
        // typeMetadata:
        // 依赖项对象的属性元数据。
        //
        // validateValueCallback:
        // 对回调的引用,除了典型的类型验证之外,该引用还应执行依赖项对象值的任何自定义验证。
        //
        // 返回结果:
        // 一个依赖项对象标识符,应使用它在您的类中设置 public static readonly 字段的值。然后,在以后使用该标识符引用依赖项对象,用于某些操作,例如以编程方式设置其值,或者获取元数据。
        public static DependencyProperty Register(string name,PropertyMetadata typeMetadata,ValidateValueCallback validateValueCallback);

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

本文地址:http://www.jb51.cc/article/p-rziokaac-dx.html 2016年03月13日完成

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...