前言
已有一年多沒有碰WP相關的開發了. 近期經常看部落格園的文章, 發現開發WP應用的同學很多, 其中博問頻道關於"WPF", "C#", "WP8"相關的問題比較多, 其中很多問題我之前也遇到過, 所以這裡寫一篇回顧文件, 希望我的經驗能給大家帶來一些幫助.
我最早的WP手機是Mozart, 這部水貨機給我帶來了無盡的樂趣, 還有苦惱. Metro的介面設計和互動方式, 非常符合我對現代應用體驗的期待, 但應用商店中app的質量數量之少, 質量之差, 讓人感覺WP的前景不妙. 我的WP開發學習就是從這時開始, 先後根據自己的需求, 搗鼓出好幾款軟體並提交到了應用商店. 儘管已經一年多未更新, 大多數應用仍有很多忠實使用者, 並收到眾多網友給我的中肯建議, 還有應用更新的請求.
寫這篇文件, 一方面是回顧下之前的開發經驗, 還有就是及時充電, 跟進WP SDK的進度, 為自己/網友繼續帶來一些新鮮氣息.
一些作品
手指畫畫
"手指畫畫"是我開發的第一款應用, 前後更新了好幾版, 最新版本是5.0, 最後更新時間是2013年7月. 這個也是我自己最滿意的作品, 但後來業餘時間太少, 中間還有一個6.0版本, 壓了一年, 直到現在也沒有提交發布. 網友熱情讓我感動, 作為一款免費軟體, 我加上了捐贈連結, 竟然收到了接近100元人民幣! 很讓人意外, 加這個連結時, 我曾自嘲到, 這個按鈕如果有人點真是見鬼了.
蜂鳥瀏覽器
這個也我花費好幾個週末時間. WP7時代的預設瀏覽器, 儘管操作體驗優秀, 但功能少的可憐, 用起來也不夠順手. 我就有想法搞一個瀏覽器, 也就有了這個作品.
其他
另外, 我練手的軟體都提到了市場, 有興趣可以查閱此連結: http://www.windowsphone.com/zh-CN/store/publishers?publisherId=%25e5%2586%25af%25e5%25a8%2581%25e9%25a3%258e&
經驗
下面回到正題. 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, 通過定義模板和模板選擇, 實現介面自定義.
繫結, 繫結!
最後重點強調, 多用資料繫結.
結束
時間不多, 今天先到這裡.