zoukankan      html  css  js  c++  java
  • WPF依赖属性1

        属性是.net的核心部分,是每个.net程序员都必须熟悉的特性,但是在wpf中引入了依赖属性的概念,依赖属性和原来属性的定义完全不一样,wpf通过依赖属性改变了元素属性的定义方式,依赖属性为wpf的数据绑定、动画以及样式,都起到了关键的作用,所以理解依赖属性,对于理解wpf至关重要。

        C#的普通属性的定义,我们十分熟悉,他是一个成员变量,增加了get/set 方法实现的一种访问器,基本定义如下:

    class Example
    {
        private string name;
        public string Name {
            get { return name; }
            set { name = value; }
         }
    }

    依赖属性的定义,比以上的步骤就复杂多得多,所有具有依赖属性的类,都是继承自DependencyObject,如何定义一个依赖属性呢,一般要经过3个步骤,

    1、定义依赖属性

    依赖属性的必须是静态的,且类型是DependencyProperty

     public static DependencyProperty NameProperty;

     2、注册依赖属性

       初始化的过程,可以直接写在定义的地方,也可以写在构造函数里面,但是最好不要写在其他地方,避免属性调用的时候,无法控制其是否初始化,造成没有必要的麻烦。注册依赖属性,通过DependencyProperty对象的Register的方法,其具有五个参数:

    1. 属性的名称;
    2. 属性的类型;
    3. 拥有该属性的类型;
    4. 还有一个FrameworkPropertyMetadata的实例,这个是一个具有附加属性设置对象,这个元素可选,这个在后面在讲解。
    5. 一个用于验证的回调函数,该元素也是可选的。

       注册一般做法有两种,其定义如下,我们对4、5的可选参数暂不定义:

        做法1:

     public static DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Example))

       做法2:

    public Example()
    {
         NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Example));
      }

    我是比较推荐第一种方法,比较简单明了。

    3、添加属性包装器

    创建依赖属性的最后一步,就是使用传统的属性封装依赖属性,使得依赖属性和传统属性的特性,由于传统属性具有一个成员字段,而依赖属性没有,所以依赖属性的定义和传统属性的定义也不一样,其定义如下:

    class Example:DependencyObject
    {
         public Example()
         {
        }
         public static DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Example));
         public String Name {
            set { SetValue(NameProperty, value); }
             get { return (string)GetValue(NameProperty); }
         }
    }

    以上就是一个依赖属性的最基本定义,我们使用依赖属性试试。

    Example e = new Example();
    e.Name = "333";
    MessageBox.Show(e.Name);

    是不是使用方式和传统属性很相似

  • 相关阅读:
    单div绘制多元素图
    js笔试题系列之二——数组与对象
    JS设计模式——策略模式
    js笔试题系列之三——函数
    zepto.js中的Touch事件
    java定时任务之Scheduled注解
    汤姆大叔送书,咱也科学抢书
    Asp.net Mvc自定义客户端验证(CheckBox列表的验证)
    摆脱烂项目
    我的ORM发展史
  • 原文地址:https://www.cnblogs.com/minhost/p/7493365.html
Copyright © 2011-2022 走看看