wpf是什么(微软WPF是什么)

[了解属性和字段]

众所周知,属性是面向对象语言中用来封装字段的外衣。它们就像是连接田野和外界的桥梁。我们可以验证数据的合法性或者通过属性控制外部可访问性等等。每个属性后面都有相应的字段来支持它。即使是自动属性,系统也会在编译时创建它的字段,但自动属性是微软给我们的语法糖果。在C#中,属性最终被编译成两种方法:get_ attribute name和set_ attribute name(如果是只读属性,则没有set方法,否则没有get方法)。

编译成方法后,属性不会占用太多空间空,因为方法存在于内存的公共方法区,每个实例的创建只是多了一个指向方法的指针。然而,领域是不同的。创建每个实例时,将在内存中打开相应的空空间来存储字段。类中的字段越多,它在内存中占据的空空间就越大。理解了这个理论,让我们正式解释什么是依赖属性,为什么有依赖属性。

[什么是依赖属性]

当我们使用一个控件时,我们可以看到这个控件有很多属性,如果有属性,就会有字段的内存开销。但是实际上,对于一个控件,我们大多数人只使用它常用的一些属性,比如我们最常用的Button,比如Content、Height等属性,那些不常用的属性就相当于白占用内存。当我们写一个复杂的XAML页面时,它涉及到许多控件的使用,这种浪费内存的现象非常严重。

在这方面,微软在WPF推出了依赖属性。依赖属性允许您通过绑定绑定到其他对象的属性或数据源,而不需要自己的字段,从而获得值。对其他对象的依赖属性是依赖属性。当它的功能明确后,我想大家都不会对依赖这个词产生怀疑。依赖属性没有自己的字段。只有在使用的时候,才可以通过Binding从其他对象中获取,为自己临时创建一个内存空的空间,这样在不使用的时候就不会有额外的内存消耗。

包含依赖属性的对象称为DependencyObject,它需要继承DependencyObject的基类。其实WPF所有的控件都继承了Dependency Object的类,控件中的属性大部分都是依赖属性,这样我们就可以通过Binding来解除值的绑定(不熟悉Binding的同学可以参考前面的Binding (1):数据绑定系列),这样就不会有内存浪费了。

[从代码中学习依赖属性]

让我们学习如何通过代码声明和使用依赖属性。请先阅读我写的一段代码:

public class Pikachu : DependencyObject{ public static readonly DependencyProperty PikachuNameProperty =DependencyProperty.Register(\”PikachuName\”,typeof(string),typeof(Pikachu));}

如上所述,必须继承DependencyObject类才能使用dependency属性。此外,声明

DependencyProperty需要用三个public static readonly的修饰符修饰,实例依赖属性不是通过新的运算符获得的,而是通过dependency property的Register方法获得的。

有一个约定依赖于对象的名称,即Property为后缀,C#中有很多命名约定,比如I为接口的前缀,Attribute为特征的后缀等。,所有这些都是为了有一个好的命名标准,从而知道名字的含义。

Register方法有三个重载。这里,我们使用它的三个参数的重载,它也有四个参数和五个参数的重载。

第一参数是指定依赖属性的包装器名称是什么(包装器就是用来包装依赖属性的,通过一个属性来包装依赖属性供外部使用,具体下文会讲,此处先做了解)第二个参数是指定依赖属性要存储的值的类型是什么第三个参数是指定依赖属性属于哪个类的,或者说是为哪个类定义依赖属性其它重载中第四个参数是指定依赖属性的源数据,用于提供给调用者此依赖属性的信息其它重载中第五个参数是自定义的依赖属性生成时的验证回调

依赖属性已声明,但如何为依赖属性赋值需要DependencyObject基类中的方法。我们使用SetValue方法和GetValue方法来操作依赖属性的值。请参见以下修改后的代码:

public class Pikachu : DependencyObject{ public string PikachuName { get =

(0)
上一篇 2022年4月28日
下一篇 2022年4月28日

相关推荐