前言
已有一年多沒有碰WP相關的開發了. 近期經常看博客園的文章, 發現開發WP應用的同學很多, 其中博問頻道關於"WPF", "C#", "WP8"相關的問題比較多, 其中很多問題我之前也遇到過, 所以這里寫一篇回顧文檔, 希望我的經驗能給大家帶來一些幫助.
我最早的WP手機是Mozart, 這部水貨機給我帶來了無盡的樂趣, 還有苦惱. Metro的界面設計和交互方式, 非常符合我對現代應用體驗的期待, 但應用商店中app的質量數量之少, 質量之差, 讓人感覺WP的前景不妙. 我的WP開發學習就是從這時開始, 先后根據自己的需求, 搗鼓出好幾款軟件並提交到了應用商店. 盡管已經一年多未更新, 大多數應用仍有很多忠實用戶, 並收到眾多網友給我的中肯建議, 還有應用更新的請求.
寫這篇文檔, 一方面是回顧下之前的開發經驗, 還有就是及時充電, 跟進WP SDK的進度, 為自己/網友繼續帶來一些新鮮氣息.
一些作品
手指畫畫
"手指畫畫"是我開發的第一款應用, 前后更新了好幾版, 最新版本是5.0, 最后更新時間是2013年7月. 這個也是我自己最滿意的作品, 但后來業余時間太少, 中間還有一個6.0版本, 壓了一年, 直到現在也沒有提交發布. 網友熱情讓我感動, 作為一款免費軟件, 我加上了捐贈鏈接, 竟然收到了接近100元人民幣! 很讓人意外, 加這個鏈接時, 我曾自嘲到, 這個按鈕如果有人點真是見鬼了.
下載地址: http://www.windowsphone.com/zh-cn/store/app/手指畫畫/7e0f3d2f-890a-4818-bbbd-6ee57689325e
蜂鳥瀏覽器
這個也我花費好幾個周末時間. WP7時代的默認瀏覽器, 盡管操作體驗優秀, 但功能少的可憐, 用起來也不夠順手. 我就有想法搞一個瀏覽器, 也就有了這個作品.
下載地址: http://www.windowsphone.com/zh-cn/store/app/蜂鳥瀏覽器/1ca4292a-36a1-4e1b-98ff-d1899003fee0
其他
另外, 我練手的軟件都提到了市場, 有興趣可以查閱此鏈接: http://www.windowsphone.com/zh-CN/store/publishers?publisherId=%e5%86%af%e5%a8%81%e9%a3%8e&
經驗
下面回到正題. WP開發, 入門門檻其實很低. 主要是C#語言學習, .net framework熟悉, 下載WP SDK和Visual Studio Express, APP設計和開發.
C#語言快速入門
C#語言本身語法優雅, 按照MSDN教程, 幾小時入門應該沒什么問題. 作為WP的開發語言, 豐富的語言特性也令人興奮. 所以
經驗一
了解.net framework內容
閱讀.NET Framework 的路線圖 了解.net framework中包含那些內容, 只需要大概瀏覽一遍,知道那些功能是這個框架提供的, 以便用時過來詳細參考. WP的SDK中提供了這篇文章的一個子集.
閱讀開發 Windows Phone 8 的應用 熟悉WP應用的生命周期和常見功能實現, 同時下載SDK.
APP設計
不建議僅抱着學習的態度進行WP開發, 一定要給自己設定一個APP目標, 界面/功能/交互, 最好打個草稿, 在紙上畫出界面和交互流程圖, 然后對照Microsoft 設計原則 看下界面是否符合WP系統的風格, 然后針對性優化.
界面/交互/功能整體需求完成后, 就可以根據上面的鏈接內開始開發了.
界面布局
WP的界面通過XAML定義, XAML和HTML其實很類似, 但語法其實更簡單, 了解Grid, StackPanel, TextBox, TextBlock, Button這幾個標簽后, 基本界面就可以完成了. 編寫界面幾點建議.
經驗二
- 多用自適應布局, 高度/寬度自適應, 方便做多分辨率設配;
- 多用資源, 比如字體\顏色\背景等, 不要寫具體的值, 而是用資源代替, 參考Windows Phone 主題資源 這樣你的界面可以自動適應各個主題;
- 將樣式整理為資源文件導入, 類似開發網頁的css文件, 一次定義, 多次復用, 切勿拷貝;
- 所有文本通過文本資源使用, 方便實現本地化;
- 所有界面數據顯示使用綁定, 不要在代碼中直接給元素設置顯示內容. 比如顯示一個文本, 不要用
TextBlock1.Text="xxx";
, 而是在xaml中使用<TextBlock Text="{Binding Xxx}"></TextBlock>
, 關於綁定, 參考數據綁定概述 (XAML);
設計模式
采用"MVVM"方式開發, 理由自己開發中可以體會到, 只要app復雜度稍微提升, "View Model"和"Model"划分很難避免. 所以一開始選擇"MVVM"方式開發可以節省不少重構工作.
"MVVM"盡管有很多框架, 但開始並不建議使用, 自己了解並應用就行了.
經驗三
- Model盡量實現"INotifyPropertyChanged"接口, 如方便盡量讓類可以序列化, 以便持久存儲;
- View Model中定義集合或列表數據, 都使用ObservableCollection類, 如有必要可以繼承自此類. 綁定顯示時, 修改數據就可以自動更新界面;
- 只要是列表類的數據顯示, 都使用ListBox, 通過定義模板和模板選擇, 實現界面自定義.
綁定, 綁定!
最后重點強調, 多用數據綁定.
結束
時間不多, 今天先到這里.