WPF依赖属性1

Posted 挨踢老干部的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

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

以上是关于WPF依赖属性1的主要内容,如果未能解决你的问题,请参考以下文章

WPF ----在UserControl的xaml里绑定依赖属性

WPF利用依赖属性和命令编写自定义控件

WPF--属性系统

WPF--属性系统

wpf 自定义控件combobox 依赖属性

WPF基础教程之属性系统