今天进入考试已经进入考试周了,大学的考试周很宁静很漫长,这是一个难得的一整块的时间可以让自己好好的做自己想做的事情。这是wp8开发学习笔记的第二个部分,今天做好了笔记,晚上整理发布。
简单说明一下,文章中很多技术名词,但是比较讨厌堆砌名词,所以不会有太多的名词。懂就可以了,没必要把名词顶在头上,其实挺反感很多人用名词去吓小白。如果觉得看着不爽,留言一个,自然就会在以后的文章里面修改。
设计
和老师做项目以来,学习了UML和rational rose,或多或少的接触到了敏捷开发,使用了scrum开发模板,也使用了MSF模板,做了类图设计,做了用例图,也做了时序图,才明白原来写程序的时候写代码的工作真的不是很重要,代码的确重要,但是设计同样的非常有价值,好的设计会让程序的代码更加漂亮,让程序的架构更加的合理。
windows phone设计原则
- 工艺出色
- 关注细节
- 安全可靠
- 利用层次和平衡营造结构感和节奏感
- 网格对齐
- 快速流畅
- 处于活动状态
- 令人愉悦的设计
- 为触控而设计
- 直观的交互
- 快速响应
- 引人入圣
- 事半功倍
- 聚焦于内容
- 重点直接明确
- 内容优于镶边(不要喧宾夺主)
- 激发信心(使用过程愉悦)
- 真实的数字
- 主要目标是信息传递,不是传递界面本身
- 链接云端
- 动态可变
- 漂亮的字体
- 大胆鲜明的色彩
设计
设计时先制作草图,首先要设计应用内导航,先厘清导航的逻辑,然后再去实现程序的细节。设计师组要聚焦在程序的外观和感觉上。程序员(可怜的码农)组要在实现程序功能上,但是程序体验很重要。想起WP上的淘宝了,谁用谁知道,和安卓差了几条街,还有WP上的优快云(希望不要被查水表),这系列文章发完后,做个优快云非官方客户端出来到商店,代码贴这里。当然这是后话。
应用程序模板
- windows phone应用,就是那种最基本的只有一个页面的程序。
- windows phone数据绑定应用(使用model-view-viewmodel架构创建的列表和导航控制)。
- windows phone pivot应用(用户使用触控手势切换pivot数据显示)。
- windows phone panorama应用(全景程序模板(大爱以前的照片APP啊,升级后变丑了))。
补充点基础知识:
- XAML
- 每个XAML元素都是一个对象的声明(system.windows.Controls中的对象,显示出来的对象都经过了渲染)。
- 元素的常见属性
- 屏幕中的位置(position)
- 高度和宽度(height & width)
- 字体的颜色和大小
- <margin>插入间距
- 所有的元素都继承于frameworkelement类。
- 魔术(12)
- UI设计时常用12或者12的倍数
- 长吁左侧的页边距至少为24
- 控件间的边距为12px的整数倍
- 以12px为对齐的增量
- VS或者BLEND中有显示12px网格的功能
- 资源文件中包含alignmentGrid.png
- 数据绑定
- blend可以从xml或者现有的类中导入数据
- 使用xml绑定数据(使用MVVM模型,绑定到的必须是共有类)
- TextBlock 绑定数据时有三种OneTime,OneWay,TwoWay。其中OneTime表示系统初始化的时候绑定,OneWay单向绑定,程序无法修改模型中的数据,TwoWay程序运行过程中可以修改,但是数据类必须实现INotifyPropertyChanged接口。
WP7.1的(大小写大家注意下)
<span style="font-family:FangSong_GB2312;">Public class ItemViewModel:INotifypropertyChanged
{
Private string _id
{
Get{return _id;}
Set
{
If(value!=_id)
{
_id=value;
NotifypropertyChanged("ID");
}
}
}
Public event PropertyChangedEventHandler PropertyChanged;
Private void NotifyPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler=PropertyChanged;
If(null!=handler)
{
Handler(this,new PropertyChangedEventArgs(propertyName));
}
}
}
</span>
WP8的代码(注意大小写)
<span style="font-family:FangSong_GB2312;">Public class ItemViewModel:INotifypropertyChanged
{
Private string _id;
Public string ID
{
Get{return _id;}
Set{this.SetProperty(ref this._id,value)}
}
Public event PropertyChangedEventHandler PropertyChange;
Protected bool Setproperty<T> (ref T storage,T value,[CallerMemberName] string propertyName=null)
{
If(object.Equals(storage,value))return false;
Storage=value;
This.OnPropertyChanged(propertyName);
Return true;
}
Protected void OnPropertyChanged([CallerMemberName] string propertyName=null)
{
Var eventHandler=this.propertyChanged;
If(eventHandler!=null)
eventHandler(this,new PropertyChangedEventArgs(propertyName);
}
}
</span>
最后说一下一个有jump list的新加的控件LongListSelector
- 相当于listbox++。
- 可以实现分组列表。
- 具有jumplist。
- 包含在rom里面,提供更好的性能。
- 其拥有的模板
- GroupFooterTemplate-列表分组的结尾区域
- GroupHeaderTemplate-列表分组的顶部区域
- ItemTemplate-每一个列表项(可以改变列表每一项的布局,可以通过blend修改模板)
- JumpListStyle-jump list的布局
- ListFooterTemplate-整个列表的结尾部分
- ListHeaderTemplate-整个列表的顶端