选中后。
选中的效果其实是两张图片的交替结果,因为只针对了240×320这种样式,所以可能很多地方写死了,下面对部分源码的解析。
先定义一个继承自Control的类FlexStartMenu
定义一个选项子类,因为这个控件中的图片中包含文字,因此我没有将子项的文字画到控件当中去,如果你们有需求的话可以修改OnPain事件,添加一个画文字的方法。
用泛型的方法,比数组的方式效率要高多了,原先我是采用数组的方式,但在两百条数据的加载效率差得非常明显,具体的时间我没有去测试过,但可以肯定的是装箱拆箱这一步能跳过去的就尽量跳过去。
核心部分来了:
可能未接触过GDI编程或许看得有点晕(我当初就是这样),建议可以先运行代码,然后变化属性先熟悉控件,然后再修改一些数值来看控件的变化,这样的体会深很多。
前台部分:绑定的过程是很简单的,先定义一组显示的图片和选中后的图片,我是用Imagelist来加载图片的,其实也可以选择不嵌入到程序中的方式,用读取路径的方式。
编后语:贴代码的方式赘述了一个九宫格控件的制作,其实这个控件可以衍生为一个数据列表控件,就像自定义一个双层文本的ListView一样(我就是这么做的),麻雀虽小,五脏俱全,小小的一个控件或许也能有变大的一天。
更新(2008.07.31):有很多朋友给我发MSN说在控件VS2005下编译会出错,Sorry,我没有声明清楚,这个控件我是在vs2008下编写的,用到了.NET CF 3.5的新特性属性设置器,所以很多属性的地方都编译不过去,所以我重新整理了下,针对.NET CF 2.0版本下的源码供大家下载。
附:控件源码下载(.NET CF 3.5)
源码下载(.NET CF 2.0)