参考资料:

  1.http://www.cnblogs.com/Zhouyongh/archive/2009/10/20/1586278.html

 

 

  基础知识:

  • DependencyObject & DependencyProperty类位于System.Windows命名空间,程序集:WindowsBase.dll;
  • DependencyObject类通过其各子类开启WPF属性系统服务;
  • 属性系统的主要功能是:将计算属性值和提供值改变的系统通知;
  • DependencyProperty类是另一个在属性系统中起重要作用的类;
  • 依赖属性是一种能够注册到WPF属性系统的属性,可通过Styling、Data Binding和Inheritance进行使用;
  • DependencyProperty类可将依赖属性注册到属性系统中,并提供每个依赖属性的认证和信息;
  • 使用依赖属性的类必须是DependencyObject类的子类,或者说必须是依赖对象才能作为依赖属性的宿主;
  • DependencyProperty不能被直接实例化,因为它没有public的构造函数;
  • DependencyProperty只能使用静态DependencyProperty.Register()方法创建其实例;
  • WPF确保DependencyProperty对象被创建后不能被改变(readonly);
  • WPF允许对象在被创建的时候并不创建包含用于存储数据的空间,可只保留在需要用到数据时能够获得默认值,且借用其他对象的数据或实时分配空间的能力来实现。这种对象即依赖对象,这种实时获取数据的能力则由依赖属性实现。
  • DependencyProperty必须以DependencyObject为宿主,并借助其SetValue和GetValue方法进行数值的写入与读取;
  • 依赖属性必须在静态构造函数中进行设置;
  • DependencyObject有ClearValue的方法,用于删除属性的本地值;
  • 依赖属性的共享,比如,TextBlock.FontFamily属性和Control.FontFamily属性指向同一个静态的依赖项属性TextElement.FontFamily;使用DependencyProperty.AddOwner()方法重用该属性;
  • 附加属性也是依赖属性的一种,定义附加属性需要使用RegisterAttached()方法;
  • ValidateValueCallback回调函数可接受或拒绝新值,用于捕获明显的违反属性约束的错误;而CoerceValueCallback回调函数可将新值改为更能被接受的值,有点类似Validate的效果;

   顺序:CoerceValueCallbackValidateValueCallback如果前两个阶段都成功,触发PropertyChangedCallback方法。

  常用类及其一些方法:

 DependencyObject类中的SetValue()和GetValue()方法:

//
        // 摘要:
        //     返回 System.Windows.DependencyObject 的此实例上的依赖项属性的当前有效值。
        //
        // 参数:
        //   dp:
        //     要为其检索值的属性的 System.Windows.DependencyProperty 标识符。
        //
        // 返回结果:
        //     返回当前的有效值。
        //
        // 异常:
        //   System.InvalidOperationException:
        //     指定的 dp 或其值无效,或者指定的 dp 不存在。
        public object GetValue(DependencyProperty dp);

     //
        // 摘要:
        //     设置依赖项属性的本地值,该依赖项属性由其标识符指定。
        //
        // 参数:
        //   dp:
        //     要设置的依赖项属性的标识符。
        //
        //   value:
        //     新的本地值。
        //
        // 异常:
        //   System.InvalidOperationException:
        //     尝试修改只读依赖项属性,或尝试修改密封 System.Windows.DependencyObject 上的属性。
        //
        //   System.ArgumentException:
        //     value 的类型不是为 dp 属性注册时使用的正确类型。
        public void SetValue(DependencyProperty dp, object value);
        //
        // 摘要:
        //     设置只读依赖项属性的本地值,该依赖项属性由其 System.Windows.DependencyPropertyKey 标识符指定。
        //
        // 参数:
        //   key:
        //     要设置的属性的 System.Windows.DependencyPropertyKey 标识符。
        //
        //   value:
        //     新的本地值。
        public void SetValue(DependencyPropertyKey key, object value);
View Code

相关文章:

  • 2021-08-11
  • 2021-10-15
  • 2021-06-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-16
  • 2022-12-23
猜你喜欢
  • 2021-09-24
  • 2022-12-23
  • 2021-11-13
  • 2021-07-07
  • 2021-09-08
  • 2022-12-23
  • 2021-06-12
相关资源
相似解决方案