加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

WPF系列(一)依赖项属性

发布时间:2020-12-14 02:16:44 所属栏目:百科 来源:网络整理
导读:依赖项属性是标准.NET属性的全新实现——具有大量新增价值。在WPF的核心特性中需要嵌入依赖性属性。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.52php.cn/article/p-rziokaac-dx.html 2016年03月13日完成

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读