看书要仔细----自定义控件库摸索记

         日前在Windows Phone上做了一个小练习,用模板定义了一个控件,觉得这控件使用效果还不错,想把它做成一个控件库,留着给其他项目用。

         没想到一个小小的控件库居然花了几天的时间才搞定。下面请看这个windows phone 的开发工具是如何折腾人的。

         我用的是Microsoft Visual Studio 2010 Express for Windows Phone。
    
        首先在文件模板列表中,只有用户控件模板,很显然这不符合我的要求,我要做的是自定义控件。

        然后在项目模板列表中,没有控件列模板,只有应用程序模板和类库模板。看到这就有点饭难了,上网查吧。
   
         网上有大侠呀!!! 还真有不少关于自定义控件的示例
         http://www.cnblogs.com/dearsj001/archive/2011/01/05/1926671.html
         http://www.silverlightchina.net/html/wp7/resource/2010/1214/4137.html?1292682733
        

         写得真心不错,不过都是把控件写在应用程序里面的,不是独立封装的。
     
         无赖之下,想了想,控件库和类库差不多。那我就在Windows Phone里建一类库,写个自定义控件类,然后自已再写个资源文件,

   来定义这个类的控件模板,岂不可好。

         说干就干,建起了类库,再写完了一个控件类。定义了模板。。。。。。嗯,这控件不是我的,我就是在上面二个链接中下载源代码,

     复制到我的项目里来了。编译成功!!!!

        然后再建一个windows phone application 程序。 然后再添加控件引用,然后。。。。。然后就出现一个对话框,说我这个项目的类型不是

   给windows phone 应用程序用的。不能引用!!!!这不坑人吗?
  

        我在windows phone 的类库模板里建的类型库,不能给windows phone应用程序使用???有这回事吗??

        然后再上网,找一个神奇大侠Charles Petzold写的一本书。赶紧了从百库文库里荡下来(这里说明不是我想看盗版书,是在当当网里下订单得几天

     时间才能送到我手上。

    我急着看咧。所以才下,不过事后还是在当当上买了)。 看到第十六章自定义控件库,里面讲到C大侠写了一个自定义控件库叫Petzold.Phone.Silverlight里面

   有不少自定义控件,还写了一个应用程序引用这些控件.

       赶紧从网上下载了源码,打开这个程序运行,不错!!!运行正常.
       这时我又琢磨了,他的代码和我的代码差不多呀,我也没有也错,为什么就不能引用咧???然到是我的项目类型建得不对,

      但Microsoft Visual Studio 2010 Express for Windows Phone  里没有自定义控件的项目模板呀?? 这大Y是从哪里建的项目??
      

      带着这个疑问,去睡觉了.....

   

       第二早上到公司里上班,再打开这个电子书看看,一行行的看.....终于把他大Y的下面这段话看了三遍
    Generally when you create a custom control, you define some new properties for the control as well as a default Style and ControlTemplate,
    and you put that new control in a DLL for sharing among multiple applications.
     You can couple the code and Style as shown in the FlipToggleButton example,
     but a more standard approach for Silverlight libraries involves defining the Style in a special file named generic.xaml
    located in a directory named Themes. This generic.xaml file has a root element of ResourceDictionary.


       终于.....找到这句话"but a more standard approach for Silverlight libraries involves defining the Style ......"
       这是说要在建立Silverlight 类库, 呵呵,打开 VS2010 赶紧了建立了一个Sivlerlight 类型库.
       把C大Y的控件"FadableToggleButton"的源码文件和资源文件直接拷贝到我的项目里来,编译,没错.再打开一个windows phone应用程序,引用控件,没错.控件终于

   在界面上显示出来,设置一下背景图片,OK,也显示出来了!!!!
 
      运行,错了!!!  这个FadableToggleButton控件的特点是,当你点击它时,它会以动画的方式慢慢切换到另一幅图片,再点击的时候,它又慢慢切换回第一幅图片.可我的这程序

    没反应,不动呀.
   
        打开C大的测试程序,运行,可以切换呀,我的为什么不行??

        再看书!!! 终于找到这句话,".....the Style in a special file named generic.xaml located in a directory named Themes. This generic.xaml file has a root element of ResourceDictionary."

        这话的意思,是说要资源文件名字一定要叫"generic.xaml",而且一定要放在一个叫"Themes"的文件夹里。
        

        嗯,当时拷贝过来的时候,心急了,直接把资源文件拷过来后,和CS文件放在同一级目录里。没有建“Themes”文件夹。
        好,建好文件夹,起名“Themes”,把“generic.xaml”文件拖进去。编译,没错,再运行windows phone 应用程序,哈哈,成功了,可以点击切换
  图片了。

        原本看到上面那段英文时,觉得那个文件夹,和那个资源文件名都是C大自已起的,是他自已做项目的习惯,资源文件一定要放到一个叫“Themes”的
文件夹里,而且资源文件名一定要叫"generic.xaml"。

       没想到这是微软规定!!!????我自定义个控件,要建个资源文件,名字由你起来定???我建个文件夹,名字也由你来定。而且我这个资源文件
 放在哪里也由你来定??? 你不是坑爹吗???  害我花了好几天时,在网上抄了N个大侠的代码,才搞定。

posted @ 2011-10-28 18:49  jassonzhang  阅读(608)  评论(5编辑  收藏  举报