|
直接下水
正如學(xué)習(xí)游泳應(yīng)該下水嘗試一下,而不是坐在教室里看書,學(xué)習(xí)Windows Phone 7開發(fā)技術(shù)也應(yīng)該親身實踐一下,而不是僅僅翻閱資料。那么,怎樣實踐呢?不必想得太復(fù)雜,這里所說的實踐就是找個需求實現(xiàn)一下。那么,找個什么需求來實現(xiàn)呢?也不必想得太復(fù)雜,作為一名程序員,我們每天都在幫助別人實現(xiàn)需求,可我們自己的需求呢?千萬別告訴我你沒有需求哦!想象一下,當你拿到一個Windows Phone 7手機,你會希望它為你做點什么特別的事?從這點出發(fā),發(fā)揮你的想象力,你應(yīng)該能找到一個起點的,比如說,寫個課程表應(yīng)用。
有了需求,很自然就想尋找實現(xiàn)需求的工具,說到這里,你可能馬上想到價格不菲的Visual Studio 2010和Expression Studio 4,有的話當然是好,沒有的話也不用擔心,因為微軟提供了免費的Expression Blend 4 for Windows Phone和Visual Studio 2010 Express for Windows Phone,足以應(yīng)付常見的Windows Phone 7開發(fā)需求了。裝好開發(fā)環(huán)境之后,可以做個Hello World試一下,就像圖1這樣:
圖1
很多人覺得Hello World太過簡單以至于不屑一顧,我不是這么想的,我認為Hello World的價值之一在于用最簡單的方式驗證開發(fā)環(huán)境是否成功安裝和正確設(shè)置,而這正是后續(xù)故事得以展開的基準點。
在開發(fā)Windows Phone 7的應(yīng)用時,我喜歡用Expression Blend來設(shè)計用戶界面,然后用Visual Studio來編寫內(nèi)部邏輯。Expression Blend提供了豐富的設(shè)計體驗,其中一個我最喜歡的特性是設(shè)計時數(shù)據(jù)的支持,你可以按照圖2所示的方式從XML文件里導(dǎo)入現(xiàn)有的數(shù)據(jù):
圖2
然后通過拖放把數(shù)據(jù)綁定到控件上,如圖3所示:
圖3
此外,你也可以讓Expression Blend為你自動生成設(shè)計時數(shù)據(jù)。當你在Expression Blend里設(shè)計好用戶界面之后,就可以在Visual Studio里為控件編寫事件處理程序了。如果你在Expression Blend的Options里設(shè)置了"使用Visual Studio創(chuàng)建和編輯事件處理程序的代碼",如圖4所示:
圖4
那么當你在圖5所示Expression Blend的Properties面板上雙擊控件事件旁邊的編輯框時,Visual Studio會打開對應(yīng)的代碼文件,并定位到對應(yīng)的事件處理程序,如果該事件處理程序還沒有,Visual Studio會為你創(chuàng)建一個。當然,如果你比較極客,喜歡手工編寫XAML,那么Visual Studio基本上已經(jīng)可以滿足你的所有需求了。
圖5
應(yīng)用的開發(fā)和測試是密不可分的,當你想運行并測試應(yīng)用時,就輪到Windows Phone 7模擬器出場了,圖6像你展示了我們的程序在模擬器中運行的樣子:
圖6
你還可以通過Visual Studio在模擬器里調(diào)試你的應(yīng)用。不過,這個模擬器只支持系統(tǒng)自帶的軟鍵盤輸入,你無法通過電腦的鍵盤進行輸入,這會為輸入測試數(shù)據(jù)造成一些不便。
善用資源
雖然Expression Blend和Visual Studio已經(jīng)提供了很多Windows Phone 7控件,但這顯然無法滿足日益增長的需求,于是微軟發(fā)布了Silverlight for Windows Phone Toolkit,通過附帶的示范程序(如圖7所示),你可以感受一下這些組件能夠?qū)崿F(xiàn)什么功能和效果:
圖7
最新版本是Feb 2011,里面包含了以下組件:
- AutoCompleteBox
- ContextMenu
- DatePicker
- GestureService/GestureListener
- ListPicker
- LongListSelector
- Page Transitions
- PerformanceProgressBar
- TiltEffect
- TimePicker
- ToggleSwitch
- WrapPanel
如果你在使用期間遇到一些奇怪的問題,請別急著自己解決,先看看別人是否也遇到這些問題,另外,你也可以看看是否有人提交了相關(guān)的補丁,除非你一眼就能看出問題所在,或者你享受解決問題的過程。我在使用LongListSelector控件時就遇到一個奇怪的問題,我在一個頁面上使用這個控件,里面顯示一組作業(yè),然后通過新的頁面來新建和編輯作業(yè),每當我從新的頁面返回時,LongListSelector控件都無法顯示剛才新建的作業(yè)或者更新的內(nèi)容,經(jīng)過一番調(diào)查,我最后發(fā)現(xiàn)LongListSelector控件沒有考慮到打開新的頁面這種情況。當我們打開新的頁面時,Windows Phone 7為了節(jié)約資源會把原來那個頁面卸載(unload);而當我們從新的頁面返回時,布局系統(tǒng)會重新計算并構(gòu)建原來那個頁面,這會導(dǎo)致LongListSelector控件在子元素的處理上出現(xiàn)錯誤(這個問題在最新的Feb 2011版本里也沒得到修復(fù))。
從這里我們不難看出,雖然Windows Phone 7的應(yīng)用屬于本地應(yīng)用,但它和我們平時接觸到的Windows應(yīng)用程序是不同的,你需要搞清楚頁面的生命周期以及頁面的導(dǎo)航是如何工作的,除非你的應(yīng)用只有一個頁面。
此外,微軟也提供了適用于Windows Phone 7的Prism,如果你打算在Windows Phone 7應(yīng)用里使用MVVM模式,那么Prism里面提供的一些類型就會幫上忙。當然,你也可以選擇其它MVVM框架,比如說,MVVM Light Toolkit,還有Caliburn Micro。類庫和框架固然能夠節(jié)省一定的工作量,但如果你想切實地提高自己的能力,那么需要的就是知識和技術(shù),你可以讀一讀微軟發(fā)布的《Windows Phone 7 Developer Guide》(英文)和《Windows Phone 7開發(fā)者培訓(xùn)包》(中文),你也可以上Windows Phone 7 Development Best Practices Wiki看看別人有什么最佳實踐,吸取一下別人的經(jīng)驗。如果你有些問題確實不知道怎么處理,還可以試著到App Hub的論壇或者博客園的博問上問一問。
技術(shù)之外
如果你希望寫個好的應(yīng)用,那么僅僅關(guān)注技術(shù)方面的內(nèi)容是不夠的,你需要把應(yīng)用看做一組完整的用戶體驗,然后站在用戶的角度考慮每個細節(jié)。
舉個例子吧,你認為圖8中的頁面設(shè)計有沒有問題?
圖8
沒有,一切看起來都是那么正常,至少表面上確實如此,用戶可以完成相關(guān)的操作,頁面的相關(guān)功能也沒有bug,可是,在圖9中你會看到,每次輸入完畢之后都不能直接關(guān)閉頁面,因為確定按鈕被軟鍵盤擋住了:
圖9
要想關(guān)閉頁面,用戶就需要先單擊頁面空白處關(guān)閉軟鍵盤,然后才能單擊確定按鈕關(guān)閉頁面。你覺得這是不是一個問題呢?我在測試這個應(yīng)用的時候,一開始只是覺得有點兒麻煩罷了,但當我重復(fù)這個過程大概十次之后,我就開始痛恨這個多余的步驟,并且深深地體會到這個小小的細節(jié)為用戶體驗帶來了多么糟糕的影響!于是,在開發(fā)后續(xù)的功能時,我嘗試了新的設(shè)計,用Application Bar按鈕替代傳統(tǒng)按鈕,就像圖10中顯示的這樣:
圖10
這樣,用戶在輸入完畢之后馬上可以單擊確定,這個小小的改動使得整個操作體驗變得更加平滑、流暢。
再舉一個例子吧,你覺得圖11中的頁面設(shè)計有沒有問題?
圖11
這是一個支持通過標簽進行篩選的筆記應(yīng)用,上面顯示當前標簽,單擊這個控件將會打開一個新的頁面,用戶可以在新的頁面里選擇其它標簽,下面顯示根據(jù)當前標簽篩選的筆記。還是那句老話,這個設(shè)計很正常,用戶照樣可以完成相關(guān)的操作,那么,還有什么需要修改的嗎?
試想一下,既然這是一個關(guān)于筆記的應(yīng)用,那么它的主要任務(wù)自然就是顯示筆記內(nèi)容,而筆記標簽作為一種輔助的手段,不應(yīng)該占用本來就不多的手機屏幕空間,它應(yīng)該在用戶需要的時候才出現(xiàn)。為此,我修改了頁面的設(shè)計,使顯示筆記內(nèi)容的ListBox占滿頁面可用空間,然后把顯示筆記標簽的ListBox隱藏在屏幕下方,修改后的程序運行效果如圖12所示。
圖12
當用戶單擊Application Bar上的按鈕時,顯示筆記標簽的ListBox將會從屏幕下方外面向上平移。這樣,應(yīng)用就可以最大限度地利用有限的屏幕空間來完成最重要的任務(wù)了。
很久之前,我看過一部電影,名字叫做《和你在一起》,里面有個情節(jié)至今仍然歷歷在目,余教授在聽完他的學(xué)生拉的小提琴之后對這個學(xué)生說:"都對,就是不好,你的音樂沒有感情,沒有感情的音樂怎么感染聽眾?"現(xiàn)在的用戶對于品質(zhì)的要求越來越高,他們不再僅僅因為你正確地實現(xiàn)了他們的需求就選擇你的應(yīng)用,他們更加重視你是否切身處地的為他們設(shè)想、考慮他們的感受,因為選擇是有成本的,他們一旦選擇了你的應(yīng)用,他們就需要嘗試適應(yīng)你的應(yīng)用,因此他們會評估這樣的付出是否值得。下次,當你打算開發(fā)一個應(yīng)用時,不妨問一下自己:憑什么你的應(yīng)用值得用戶選擇?
著眼未來
去年Windows Phone 7首次發(fā)布時,有人戲說它是2007年水平的iPhone,潛臺詞當然是指它和當年的iPhone一樣退化為單任務(wù)方式,比較諷刺的是,當微軟信心滿滿地解釋不支持多任務(wù)是為了保證電池的續(xù)航性時,蘋果宣布ios支持多任務(wù)了,盡管那還不是真正的多任務(wù)。
然而,正當Windows Phone 7的開發(fā)者學(xué)習(xí)如何處理單任務(wù)方式導(dǎo)致的各種問題并為之而發(fā)愁時,微軟又宣布Windows Phone的后續(xù)版本將會支持真正的多任務(wù)。如果你希望你的應(yīng)用在支持多任務(wù)的Windows Phone手機上有出色的表現(xiàn),你現(xiàn)在就要把它考慮進你的設(shè)計里了。
為Windows Phone 7開發(fā)應(yīng)用還有一個廣受關(guān)注的問題--應(yīng)用的部署。在Windows Phone 7之前,我們可以自行制作CAB安裝包,然后把它復(fù)制到手機上安裝,可惜,這種情況在Windows Phone 7上不復(fù)存在,因為微軟決定Windows Phone 7的應(yīng)用必須通過Marketplace部署。此外,如果你想在真機上測試你的應(yīng)用,你需要注冊成為Windows Phone 7的開發(fā)者并交納99美元的會費(目前中國大陸的開發(fā)者還不能直接注冊),否則你無法把你的應(yīng)用部署到真機上。為了解決這個問題,Long Zheng、Rafael Rivera 和 Chris Walsh 一同發(fā)布了一款名為"ChevronWP7"的 Windows Phone 7 手機開發(fā)者解鎖工具:
圖13
隨后,微軟與Windows Phone 7破解團隊ChevronWP7進行了會晤,共同探討ChevronWP7解鎖工具的官方化,我相信他們的合作會為我們開發(fā)者提供更多部署的選擇。
經(jīng)常留意業(yè)界動態(tài),及時學(xué)習(xí)所需知識,合理利用各種資源,綜合考慮不同因素,這些都是開發(fā)一個好的應(yīng)用必不可少的,然而,如果沒有踏踏實實地踏出第一步,一切都是空談,因此,最終我們又回到了最初的問題:學(xué)習(xí)Windows Phone 7開發(fā)技術(shù)應(yīng)該親身實踐一下。
it知識庫:Silverlight for Windows Phone 7開發(fā)體驗,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。