新的体验,新的开始
学习Windows Phone开发的目的是为了开发Windows Phone应用,但什么样的应用才算好的应用呢?毫无疑问,我们需要一些榜样作为参照,我们希望了解一个标准的Windows Phone应用应该是怎样的,而这正是学习Windows Phone开发的第一步。
一般而言,我们有以下3种途径体验Windows Phone:
安装开发工具 ,写个Hello World应用
当你对Windows Phone有了一个感性的认识之后,接下来就是下载和安装开发工具了, 并且熟悉一下开发工具。这套开发工具是免费的,包含Visual Studio 2010 Express for Windows Phone、Expression Blend 4 for Windows Phone和Windows Phone模拟器等,足以应付日常Windows Phone应用的开发任务了。
安装开发工具之后,按照惯例应该写个Hello World应用,这个应用不必很复杂,它的目的是为了让你经历一次简单的开发过程,同时验证开发工具的安装和配置没有问题。
值得提醒的是,Windows Phone模拟器是不能在虚拟机里面运行的,而且它对显卡也有要求,需要“使用 WDDM 1.1 驱动程序的支持 DirectX 10 或更高版本的图形卡”,否则,Windows Phone模拟器的表现会有点不正常,比如看不到一些动画效果、浅色主题渲染问题以及IE浏览器和WebBrowser控件无法显示网页内容等。
找个实际的需求开发一下,边做边学
有了前面的准备,接下来就可以正式学习Windows Phone开发了。如果你想系统地学习,可以找一些书来看,这里推荐Charles Petzold的《Programming Windows Phone 7》,这本书免费提供PDF版,并且附带完整的代码示例,喜欢阅读经典电子书的同学绝对不能错过。如果你倾向于中文内容,也没有问题,因为这本书已经由国内的Windows Phone开发者林永坚、姜泳涛和李鹏翻译并出版了,书名是《Windows Phone 7程序设计》。
想要更好的把知识学到手,你需要通过一个实际的应用把它们串联起来,这里推荐Allen Lee的《WP7有约》,这个系列文章通过一个实际的应用详细展现一个完整的开发过程以及在这个过程中的所思所想,具有一定的借鉴价值。
实际上,你不必把Windows Phone的知识塞满脑子才能开发,只要你有C#的基础,对Windows Phone的基本概念有所了解,就可以开始了。你可以挑选一个常见的需求,比如很多人都做过的微博客户端,或者你自己想要的功能,然后着手分析和设计,接 着进行实现。在这个过程中,你会遇到各种各样的问题,各种不懂和各种郁闷,但你不应感到失落,因为这些困难为你提供了学习的目标和方向,你的知识和经验正 是从解决每一个这样的困难积累起来的,而所有这些困难串联起来最终成就了你要开发的应用以及你的成就感。
无论你选择什么需求进行开发,有一点必须切记,那就是你必须对它们有兴趣。这点很重要,因为在你做出决定之后的一段时间里你都要和它们打交道,所以 最好是你有机会用到的,这样就能建立一个有效的反馈循环,帮助自己深入了解这些需求。当然,如果你能接触到潜在的用户就更好了,你可以通过与他们的交流拓 宽你对这些需求乃至整个应用的视野。
还有一点值得提醒的,开始的时候不必太过担心你的设计和实现不好,因为随着时间的推移,你会发现需求产生变化,当初设想的某些需求消失了或者合并到 其他需求里,以及一些新的需求产生了等等,这些都可能对设计和实现带来冲击。这对于你来说至少有两个好处,第一,它让你有机会重新审视原先设计和实现的不 足,这些经验教训应该记录下来,第二,它让你深刻体会到需求变更对整个过程有哪些影响。
不管怎样,尽早开始!
学用第三方库
随着开发过程的推移,你很快就会发现标准的控件无法满足你的需要,这个时候就需要求助于第三方控件库了。
Silverlight for Windows Phone Toolkit是最常用的第三方库之一,它包含大量常用的控件,比如WrapPannel、ContextMenu等,同时也包含了大量不受欢迎的bug,比如Allen Lee在《WP7有约(二):课后作业》最 后一节提到的从新的页面返回LongListSelector控件所在页面时出现的异状。这些开源的第三方库可以极大地丰富你的开发工具包,但在使用之前 你需要有个心理准备,万一出了问题,你有可能需要自己阅读和调试代码,找出并修复问题。这是一个好的学习机会,你除了可以学习如何使用这些第三方库,还可 以学习它们是如何设计和实现出来的,不过,如果项目比较紧就另当别论了。
Coding4Fun Windows Phone Toolkit是另一个最常用的第三方库,它也包含大量常用控件,比如RoundButton、Message Prompt等,当然也存在问题,比如Allen Lee曾经在Expression Blend里使用它的某个版本时碰到的RoundButton模板异状。 这个时候,你可以到官网那里反应问题,你需要尽可能把问题描述清楚,最好能够提供期望效果和实际效果的截图,帮助开发人员更好地你的问题。实际上,你在测 试自己开发的应用,也应该详细地描述并存档,以便你或者你的搭档将来定位错误的时候不会无从入手,而且将来添加新的功能时也可以利用这些信息进行回归测 试。
关键在于,你应该从现在开始一点一点地积累使用经验以及遇到问题时的应对措施,你可以把这些知识集中起来,比如Alexis的《Windows Phone实用开发技巧合集》,它们将会在你日后开发应用的时候给予非常可观的回报。
分享和交流
当想法仅存在于你的脑子里时,它是无序的;当你把它写下来时,面前的文字马上就会化身成一面镜子,清楚地映出你的想法。事实上,在你写下它的过程中,你的大脑会非常努力地进行整理,你甚至会察觉有些想法正在发生变化,这对于理解你的想法非常有帮助。写下来之后,拿出给别人看看,你会得到别人的反馈,无论是正面反馈还是负面反馈,都能拓宽你的视野。
前面曾经说过,你不必在开始的时候担心你的设计和实现不够好,没有人能够把将来所有情况都考虑进来,某些经历的确实会导致归纳过程产生偏颇,这个时 候你需要的不是独自苦思,而是拿着你的想法去找别人,从交流的碰撞中寻求更好的突破。如果你能在交流中暂时放下对某些想法的固着,你可能会发现更好的想 法,而不是仅仅对原来想法的小修小补。
曾经有个老师说:“一个知识,你听懂了不算真的懂,你能把别人讲懂了才算真的懂。”我相信这是分享和交流的另一个好处,也正是许多人愿意在博客里分享心得的主要原因。
最后,我们把上面的内容总结成一条学习之路: