C#的attribute与属性窗的关系
attribute特性
特性,即attribute,是一种特殊的类,他们都继承自名为attribute的一个类;
C#中有许多预派生定义好的attribute类,我们可以直接拿来用,它们有丰富的功能,应用于不同场景;
我们也可以自定义一个attribute类,只要在定义时指定继承自attribute就可以了;
attribute与property
attribute可以用来修饰method方法、property属性、class类等,来达到某些特定的目的;
可见,attribute相对于property是一个从属关系。
attribute在propertyGrid属性窗中的应用
在winform程序里,当属性窗的selectObj属性选定某一个对象时,该对象的共有属性会显示在属性窗中。
如果我们对它的某些属性设置一些特性,就可以改变显示效果,如:
DisplayName:设置属性窗中显示的属性名字,如属性startPoint的该属性设置为开始点,增强可读性;
Description:选中属性时在下面的描述框里呈现Description中的描述内容;
Catagory:设置分类,当有多个属性要在属性窗中呈现时,该特性值相同的会排放在一起。
如何在属性窗中修改属性
只有绑定了类型转换器typeConverter特性的属性才能够在属性窗中直接修改;
一些常用的类型有windows自带的类型转换器,包括int、float、string这些的简单基本类型和color、font、size这样一部分复杂的类型等;
而对于没有自带类型转换器的大部分属性,则需要自定义一个类型转换器并绑定到属性上面;
如何自定义属性转换器
不管是类、结构体还是基本类型,都是不能直接显示在屏幕上的,而是转换成字符串的形式来显示;
所以typeConverter的基本思想就是以字符串为媒介,完成属性的显示;
以某个类为例,当显示类时,先将类的信息通过typeConverter的逻辑转换成字符串,然后显示在属性窗上;
当修改类时,修改的信息作为一个字符串str,通过typeConverter的逻辑拆分这个字符串,提取出类的信息,然后基于这些信息创建一个类,把这个类赋给要修改的类;
在自定义Type Converter时,必须重写四个函数:CanConvertFrom ConvertFrom CanConvertTo ConvertTo;
属性窗中的属性修改的格式均是由这个typeConverter来决定的。
常用的typeconverter
expandableObjectConverter
对类应用该特性后,会提供一个可展开的框,框里会有类的各属性信息,当然只有已经应用了typeConverter的属性才会正确显示,否则显示的是属性的toString形式。该类的主标题显示的是它的toString,可以重写它的toString来在expandableObjectConverter中表现出想要的内容。