Silverlight for Windows Phone 7開發體驗

來源: InfoQ  發布時間: 2011-03-20 20:47  閱讀: 1839 次  推薦: 0   原文鏈接   [收藏]  
摘要:作為一名程序員,我們每天都在幫助別人實現需求,可我們自己的需求呢?千萬別告訴我你沒有需求哦!想象一下,當你拿到一個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開發技術應該親身實踐一下。

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜

    大師兄 發表在 痞客邦 留言(0) 人氣()