Silverlight for Windows Phone 7开发体验

  直接下水

  正如学习游泳应该下水尝试一下,而不是坐在教室里看书,学习Windows Phone 7开发技术也应该亲身实践一下,而不是仅仅翻阅资料。那么,怎样实践呢?不必想得太复杂,这里所说的实践就是找个需求实现一下。那么,找个什么需求来实现呢?也不必想得太复杂,作为一名程序员,我们每天都在帮助别人实现需求,可我们自己的需求呢?千万别告诉我你没有需求哦!想象一下,当你拿到一个Windows Phone 7手机,你会希望它为你做点什么特别的事?从这点出发,发挥你的想象力,你应该能找到一个起点的,比如说,写个课程表应用

  有了需求,很自然就想寻找实现需求的工具,说到这里,你可能马上想到价格不菲的Visual Studio 2010和Expression Studio 4,有的话当然是好,没有的话也不用担心,因为微软提供了免费的Expression Blend 4 for Windows Phone和Visual Studio 2010 Express for Windows Phone,足以应付常见的Windows Phone 7开发需求了。装好开发环境之后,可以做个Hello World试一下,就像图1这样:

图1

  很多人觉得Hello World太过简单以至于不屑一顾,我不是这么想的,我认为Hello World的价值之一在于用最简单的方式验证开发环境是否成功安装和正确设置,而这正是后续故事得以展开的基准点。

  在开发Windows Phone 7的应用时,我喜欢用Expression Blend来设计用户界面,然后用Visual Studio来编写内部逻辑。Expression Blend提供了丰富的设计体验,其中一个我最喜欢的特性是设计时数据的支持,你可以按照图2所示的方式从XML文件里导入现有的数据:

图2

  然后通过拖放把数据绑定到控件上,如图3所示:

图3

  此外,你也可以让Expression Blend为你自动生成设计时数据。当你在Expression Blend里设计好用户界面之后,就可以在Visual Studio里为控件编写事件处理程序了。如果你在Expression Blend的Options里设置了"使用Visual Studio创建和编辑事件处理程序的代码",如图4所示:

图4

  那么当你在图5所示Expression Blend的Properties面板上双击控件事件旁边的编辑框时,Visual Studio会打开对应的代码文件,并定位到对应的事件处理程序,如果该事件处理程序还没有,Visual Studio会为你创建一个。当然,如果你比较极客,喜欢手工编写XAML,那么Visual Studio基本上已经可以满足你的所有需求了。

图5

  应用的开发和测试是密不可分的,当你想运行并测试应用时,就轮到Windows Phone 7模拟器出场了,图6像你展示了我们的程序在模拟器中运行的样子:

图6

  你还可以通过Visual Studio在模拟器里调试你的应用。不过,这个模拟器只支持系统自带的软键盘输入,你无法通过电脑的键盘进行输入,这会为输入测试数据造成一些不便。

  善用资源

  虽然Expression Blend和Visual Studio已经提供了很多Windows Phone 7控件,但这显然无法满足日益增长的需求,于是微软发布了Silverlight for Windows Phone Toolkit,通过附带的示范程序(如图7所示),你可以感受一下这些组件能够实现什么功能和效果:

图7

  最新版本是Feb 2011,里面包含了以下组件:

  1. AutoCompleteBox
  2. ContextMenu
  3. DatePicker
  4. GestureService/GestureListener
  5. ListPicker
  6. LongListSelector
  7. Page Transitions
  8. PerformanceProgressBar
  9. TiltEffect
  10. TimePicker
  11. ToggleSwitch
  12. WrapPanel

  如果你在使用期间遇到一些奇怪的问题,请别急着自己解决,先看看别人是否也遇到这些问题,另外,你也可以看看是否有人提交了相关的补丁,除非你一眼就能看出问题所在,或者你享受解决问题的过程。我在使用LongListSelector控件时就遇到一个奇怪的问题,我在一个页面上使用这个控件,里面显示一组作业,然后通过新的页面来新建和编辑作业,每当我从新的页面返回时,LongListSelector控件都无法显示刚才新建的作业或者更新的内容,经过一番调查,我最后发现LongListSelector控件没有考虑到打开新的页面这种情况。当我们打开新的页面时,Windows Phone 7为了节约资源会把原来那个页面卸载(unload);而当我们从新的页面返回时,布局系统会重新计算并构建原来那个页面,这会导致LongListSelector控件在子元素的处理上出现错误(这个问题在最新的Feb 2011版本里也没得到修复)。

  从这里我们不难看出,虽然Windows Phone 7的应用属于本地应用,但它和我们平时接触到的Windows应用程序是不同的,你需要搞清楚页面的生命周期以及页面的导航是如何工作的,除非你的应用只有一个页面。

  此外,微软也提供了适用于Windows Phone 7的Prism,如果你打算在Windows Phone 7应用里使用MVVM模式,那么Prism里面提供的一些类型就会帮上忙。当然,你也可以选择其它MVVM框架,比如说,MVVM Light Toolkit,还有Caliburn Micro。类库和框架固然能够节省一定的工作量,但如果你想切实地提高自己的能力,那么需要的就是知识和技术,你可以读一读微软发布的《Windows Phone 7 Developer Guide》(英文)和《Windows Phone 7开发者培训包》(中文),你也可以上Windows Phone 7 Development Best Practices Wiki看看别人有什么最佳实践,吸取一下别人的经验。如果你有些问题确实不知道怎么处理,还可以试着到App Hub的论坛或者博客园的博问上问一问。

  技术之外

  如果你希望写个好的应用,那么仅仅关注技术方面的内容是不够的,你需要把应用看做一组完整的用户体验,然后站在用户的角度考虑每个细节。

  举个例子吧,你认为图8中的页面设计有没有问题?

图8

  没有,一切看起来都是那么正常,至少表面上确实如此,用户可以完成相关的操作,页面的相关功能也没有bug,可是,在图9中你会看到,每次输入完毕之后都不能直接关闭页面,因为确定按钮被软键盘挡住了:

图9

  要想关闭页面,用户就需要先单击页面空白处关闭软键盘,然后才能单击确定按钮关闭页面。你觉得这是不是一个问题呢?我在测试这个应用的时候,一开始只是觉得有点儿麻烦罢了,但当我重复这个过程大概十次之后,我就开始痛恨这个多余的步骤,并且深深地体会到这个小小的细节为用户体验带来了多么糟糕的影响!于是,在开发后续的功能时,我尝试了新的设计,用Application Bar按钮替代传统按钮,就像图10中显示的这样:

图10

  这样,用户在输入完毕之后马上可以单击确定,这个小小的改动使得整个操作体验变得更加平滑、流畅。

  再举一个例子吧,你觉得图11中的页面设计有没有问题?

图11

  这是一个支持通过标签进行筛选的笔记应用,上面显示当前标签,单击这个控件将会打开一个新的页面,用户可以在新的页面里选择其它标签,下面显示根据当前标签筛选的笔记。还是那句老话,这个设计很正常,用户照样可以完成相关的操作,那么,还有什么需要修改的吗?

  试想一下,既然这是一个关于笔记的应用,那么它的主要任务自然就是显示笔记内容,而笔记标签作为一种辅助的手段,不应该占用本来就不多的手机屏幕空间,它应该在用户需要的时候才出现。为此,我修改了页面的设计,使显示笔记内容的ListBox占满页面可用空间,然后把显示笔记标签的ListBox隐藏在屏幕下方,修改后的程序运行效果如图12所示。

图12

  当用户单击Application Bar上的按钮时,显示笔记标签的ListBox将会从屏幕下方外面向上平移。这样,应用就可以最大限度地利用有限的屏幕空间来完成最重要的任务了。

  很久之前,我看过一部电影,名字叫做《和你在一起》,里面有个情节至今仍然历历在目,余教授在听完他的学生拉的小提琴之后对这个学生说:"都对,就是不好,你的音乐没有感情,没有感情的音乐怎么感染听众?"现在的用户对于品质的要求越来越高,他们不再仅仅因为你正确地实现了他们的需求就选择你的应用,他们更加重视你是否切身处地的为他们设想、考虑他们的感受,因为选择是有成本的,他们一旦选择了你的应用,他们就需要尝试适应你的应用,因此他们会评估这样的付出是否值得。下次,当你打算开发一个应用时,不妨问一下自己:凭什么你的应用值得用户选择?

  着眼未来

  去年Windows Phone 7首次发布时,有人戏说它是2007年水平的iPhone,潜台词当然是指它和当年的iPhone一样退化为单任务方式,比较讽刺的是,当微软信心满满地解释不支持多任务是为了保证电池的续航性时,苹果宣布ios支持多任务了,尽管那还不是真正的多任务。

  然而,正当Windows Phone 7的开发者学习如何处理单任务方式导致的各种问题并为之而发愁时,微软又宣布Windows Phone的后续版本将会支持真正的多任务。如果你希望你的应用在支持多任务的Windows Phone手机上有出色的表现,你现在就要把它考虑进你的设计里了。

  为Windows Phone 7开发应用还有一个广受关注的问题--应用的部署。在Windows Phone 7之前,我们可以自行制作CAB安装包,然后把它复制到手机上安装,可惜,这种情况在Windows Phone 7上不复存在,因为微软决定Windows Phone 7的应用必须通过Marketplace部署。此外,如果你想在真机上测试你的应用,你需要注册成为Windows Phone 7的开发者并交纳99美元的会费(目前中国大陆的开发者还不能直接注册),否则你无法把你的应用部署到真机上。为了解决这个问题,Long Zheng、Rafael Rivera 和 Chris Walsh 一同发布了一款名为"ChevronWP7"的 Windows Phone 7 手机开发者解锁工具:

图13

  随后,微软与Windows Phone 7破解团队ChevronWP7进行了会晤,共同探讨ChevronWP7解锁工具的官方化,我相信他们的合作会为我们开发者提供更多部署的选择。

  经常留意业界动态,及时学习所需知识,合理利用各种资源,综合考虑不同因素,这些都是开发一个好的应用必不可少的,然而,如果没有踏踏实实地踏出第一步,一切都是空谈,因此,最终我们又回到了最初的问题:学习Windows Phone 7开发技术应该亲身实践一下。

it知识库Silverlight for Windows Phone 7开发体验,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。