Windows Phone编程回顾
前言
已有一年多没有碰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, 通过定义模板和模板选择, 实现界面自定义.
绑定, 绑定!
最后重点强调, 多用数据绑定.
结束
时间不多, 今天先到这里.
Windows Phone编程回顾的更多相关文章
- (转)Windows驱动编程基础教程
版权声明 本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...
- 《windows核心编程系列》二十一谈谈基址重定位和模块绑定
每个DLL和可执行文件都有一个首选基地址.它表示该模块被映射到进程地址空间时最佳的内存地址.在构建可执行文件时,默认情况下链接器会将它的首选基地址设为0x400000.对于DLL来说,链接器会将它的首 ...
- 《Windows核心编程》之“完成端口”(对所有IO都是如此,不仅仅是对socket)
<Windows核心编程>第10章开头部分一再强调:“IO Completion Port”是“构建高性能.可升缩的应用程序”的最佳设施之一,它不仅适用于处理设备IO,也适用于其它越来越多 ...
- windows多线程编程星球(一)
以前在学校的时候,多线程这一部分是属于那种充满好奇但是又感觉很难掌握的部分.原因嘛我觉得是这玩意儿和编程语言无关,主要和操作系统的有关,所以这部分内容主要出现在讲原理的操作系统书的某一章,看完原理是懂 ...
- windows核心编程 - 线程同步机制
线程同步机制 常用的线程同步机制有很多种,主要分为用户模式和内核对象两类:其中 用户模式包括:原子操作.关键代码段 内核对象包括:时间内核对象(Event).等待定时器内核对象(WaitableTim ...
- windows核心编程---第九章 同步设备IO与异步设备IO之同步IO
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...
- windows核心编程---第八章 使用内核对象进行线程同步
使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步 ...
- storysnail的Windows串口编程笔记
storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据 ...
- windows核心编程---第二章 字符和字符串处理
使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也 ...
随机推荐
- 模板——最小生成树kruskal算法+并查集数据结构
并查集:找祖先并更新,注意路径压缩,不然会时间复杂度巨大导致出错/超时 合并:(我的祖先是的你的祖先的父亲) 找父亲:(初始化祖先是自己的,自己就是祖先) 查询:(我们是不是同一祖先) 路径压缩:(每 ...
- wamp 的配置
一 . 安装 二 . 配置 安装过后打开E:\wamp2\wamp\bin\apache\Apache2.2.21\conf\httpd.conf 寻找Directoy 为文件路径 里面的默认文件删 ...
- 搭建Jupyter Notebook服务器
昨天发了Jupyter的使用,补一篇Jupyter服务器的搭建~ 一.搭建Jupyter 1.安装 使用virtualenv建虚拟环境.在虚拟环境中安装jupyter.matplotlib等等需要的库 ...
- B/S与C/S架构简介
概念: C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境 ...
- 查看Pyton的版本号和32/64位平台
怎么查看Python的版本号?使用的Python是32位还是64位的?用以下两条Python 指令就可以知道. 方法1:通过Python代码查看 import platform import sys ...
- python新手之字典增删改查
一.字典的定义 city_list = { 'beijin':"北京",'shanghai':"上海" } print(city_list) 二.字典添加一个元 ...
- 中国大学MOOC-C程序设计(浙大翁恺)—— 单词长度
题目内容: 你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束.你要输出这行文本中每个单词的长度.这里的单词与语言无关,可以包括各种符号,比如“it's”算一个单词,长度为4.注意,行中 ...
- HyperLedger Fabric 1.4 简介(6.1)
Fabric是一个提供模块化分布式账本解决方案的平台,并具备保密性.可伸缩性.灵活性和可扩展性等特性.Fabric具有可直接拔插启用和相互独立不同功能的模块,并能适应在经济社会中错综复杂的各种场景. ...
- 关于条件约束问题的无偏差统计——一个偏差控制型生成器(Unbiased Statistics of a Constraint Satisfaction Problem – a Controlled-Bias Generator——by Denis Berthier)
论文地址:https://hal.archives-ouvertes.fr/hal-00641955 Unbiased Statistics of a Constraint Satisfaction ...
- Jedis+Redis+spring缓存
Redis程序使用它?Jedis 访问redis java api Redis-server & //后台运行防火墙要关闭 ts-parent的pom.xml加上jedis依赖 <dep ...