WPF依赖属性-依赖属性介绍

2021-06-28 22:06

阅读:553

标签:shadow   chm   usb   对象   继承   white   耦合   占用   lan   

WPF的设计理念是:数据驱动,UI与逻辑松耦合

一、传统的CLR属性
public class Person
{
    private string _Name;
    public string Name
    {
        get
        {
             return _Name;
         }
         set
         {
            _Name = value;
         }
     }
 }
二、CLR属性特点:
  • CLR属性,是实例属性;
  • 在多级继承的情况下,孙孙辈对象占用内存空间不可避免的膨胀;
三、依赖属性
// 1. 使类型继承DependencyObject类
    public class Person : DependencyObject
    {
        // 2. 声明一个静态只读的DependencyProperty 字段
        public static readonly DependencyProperty nameProperty;
        static Person()
        {
            // 3. 注册定义的依赖属性
            nameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Person), 
                new PropertyMetadata("Learning Hard",OnValueChanged)); 
        }
        // 4. 属性包装器,通过它来读取和设置我们刚才注册的依赖属性
        public string Name
        {
            get { return (string)GetValue(nameProperty); }
            set { SetValue(nameProperty, value); }
        }
        private static void OnValueChanged(DependencyObject dpobj, DependencyPropertyChangedEventArgs e)
        {
            // 当只发生改变时回调的方法
        }
    }
四、依赖属性的特点

1、依赖属性声明为:类的静态只读对象;
2、依赖属性是通过DependencyObject注册的属性;
3、依赖属性读取是通过DependencyObject的方法读取;
4、类的依赖属性只有一份,且由DependecyObject维护。
5、多级继承,且大多数字段值不改变的情况下,减少内存占比
?DependencyProperty将一个对象依赖属性存储在一个全局的Hashtable中;通过依赖对象(DependencyObject)的GetValue和SetValue存取数据;
6、?依赖属性值可以通过Binding依赖于其它对象上,这就使得数据源一变动;依赖于此数据源的依赖属性全部进行更新

五、依赖属性特性应用

1、依赖属性(值传递)继承
中逻辑树上实际父级变动,在子级没有显式指定值时,默认采用父级的值
?如下图中:窗体上所有的字体都变大(从20变成了50),并不需要通过设置每个控件的属性;只需要设置窗体的属性,这个窗体的子控件就会适应这一改变,并且使用相同的设置
技术图片


        
        Item1Item2
            
        Solidmango

2、属性的改变通知
CLR属性只有通过事件响应函数或者回调函数来传递属性性改变; 依赖属性只需配置就可以(见第三部分的示例)

更详细的介绍参见依赖属性的传递

五、依赖属性的优先级

技术图片

WPF依赖属性-依赖属性介绍

标签:shadow   chm   usb   对象   继承   white   耦合   占用   lan   

原文地址:https://www.cnblogs.com/MonoHZ/p/14944137.html


评论


亲,登录后才可以留言!