描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787302371663
本书配套提供了书中实例源代码,*限度地满足读者高效学习和快速动手实践的需要。
本书内容覆盖面广、实例丰富、注重理论学习与实践开发的配合,非常适合于Windows Phone 8.1开发入门的读者,也适合于从其他智能手机平台转向Windows Phone 8.1平台的读者; 对于有Windows Phone 开发经验的读者,也极具参考价值。
开发基础篇
第1章概述
1.1Windows Phone生态的发展与机遇
1.1.1Windows Phone的发展历史
1.1.2Windows Phone的生态情况
1.1.3Windows Phone对于开发者的机遇
1.1.4Windows Phone 8.1的新特性
1.2Windows Phone的技术架构
1.2.1Windows运行时
1.2.2Windows Phone 8.1应用程序模型
1.2.3Windows Phone 8.1和Silverlight 8.1的区别
1.2.4Windows Phone 8.1和Windows Phone 8.0的API 差异
第2章开发环境和项目工程解析
2.1搭建开发环境
2.1.1开发环境的要求
2.1.2开发工具的安装
2.2创建Windows Phone 8.1应用
2.2.1创建Hello Windows Phone项目
2.2.2解析Hello Windows Phone应用
第3章XAML简介
3.1理解XAML
3.2XAML语法概述
3.2.1命名空间
3.2.2对象元素
3.2.3设置属性
3.2.4附加属性
3.2.5标记扩展
3.2.6事件
开发技术篇
第4章常用控件
4.1控件的基类
4.2按钮(Button)
4.3文本块(TextBlock)
4.4文本框(TextBox)
4.5边框(Border)
4.6超链接(HyperlinkButton)
4.7单选按钮(RadioButton)
4.8复选框(CheckBox)
4.9进度条(ProgressBar)
4.10滚动视图(ScrollViewer)
4.11滑动条(Slider)
4.12时间选择器(TimePicker)和日期选择器(DatePicker)
4.13枢轴控件(Pivot)
4.14全景视图控件(Hub)
4.15浮出控件(Flyout)
4.16下拉框(ComboBox)
4.17命令栏/菜单栏(CommandBar)
第5章布局管理
5.1布局的通用属性
5.2网格布局(Grid)
5.3堆放布局(StackPanel)
5.4绝对布局(Canvas)
第6章应用数据
6.1应用设置存储
6.1.1应用设置的概述
6.1.2应用设置的操作
6.1.3设置存储容器
6.1.4复合设置数据
6.2应用文件存储
6.2.1三种类型的应用文件
6.2.2应用文件和文件夹的操作
6.2.3文件Stream和Buffer读写操作
6.2.4应用文件的URI方案
6.3常用的存储数据格式
6.3.1JSON数据序列化存储
6.3.2XML文件存储
6.4安装包文件数据
6.4.1安装包文件访问
6.4.2安装包文件的URI方案
第7章几何图形与位图
7.1基本的图形
7.1.1矩形(Rectangle)
7.1.2椭圆(Ellipse)
7.1.3直线(Line)
7.1.4折线(Polyline)
7.1.5多边形(Polygon)
7.1.6路径(Path)
7.1.7Geometry 类和Brush 类
7.2使用位图编程
7.2.1拉伸图像
7.2.2使用Clip属性裁剪图像
7.2.3使用RenderTargetBitmap类生成图片
7.2.4存储生成的图片文件
第8章动画编程
8.1动画概述
8.1.1理解动画
8.1.2时间线(Timeline)和故事板(Storyboard)
8.2线性插值动画
8.2.1动画的基本语法
8.2.2线性动画的基本语法
8.3关键帧动画
8.3.1关键帧动画概述
8.3.2线性关键帧
8.3.3样条关键帧
8.3.4离散关键帧
8.4变换动画
8.4.1平移动画
8.4.2旋转动画
8.4.3缩放动画
8.4.4扭曲动画
8.5三维动画
8.5.1三维变换属性
8.5.2三维动画实现
第9章吐司(Toast)通知和磁贴(Tile)
9.1Toast通知
9.1.1创建一个通知消息
9.1.2定期 Toast 通知
9.1.3实例演示: Toast通知
9.2磁贴
9.2.1创建磁贴
9.2.2获取、删除和更新磁贴
9.2.3磁贴通知
9.2.4实例演示: 磁贴的常用操作
第10章触摸感应编程
10.1触摸事件概述
10.1.1指针事件(单指操作)
10.1.2操作事件(多点触摸)
10.2应用实例——移动截图
10.2.1截图区域的选择
10.2.2图片的局部截取
10.2.3截图的展示
10.3应用实例——几何图形画板
10.3.1ManipulationStarted事件: 初始化画图状态
10.3.2ManipulationDelta事件: 处理画图和拖动
10.3.3ManipulationCompleted事件: 结束操作
第11章数据绑定
11.1数据绑定的基础
11.1.1数据绑定的原理
11.1.2创建绑定
11.1.3用元素值绑定
11.1.4三种绑定模式
11.1.5更改通知
11.1.6绑定数据转换
11.2绑定集合
11.2.1数据集合
11.2.2绑定列表控件
11.2.3绑定ObservableCollection集合
11.2.4绑定自定义集合
第12章网络编程
12.1网络编程之HttpWebRequest类
12.1.1HttpWebRequest实现Get请求
12.1.2HttpWebRequest实现Post请求
12.1.3网络请求的取消
12.1.4超时控制
12.1.5断点续传
12.1.6实例演示: RSS阅读器
12.2网络编程之HttpClient类
12.2.1Get请求获取字符串和数据流数据
12.2.2Post请求发送字符串和数据流数据
12.2.3设置和获取Cookie
12.2.4网络请求的进度监控
12.2.5自定义HTTP请求筛选器
12.2.6实例演示: 部署IIS服务和实现客户端对服务器的请求
12.3推送通知
12.3.1推送通知的原理和工作方式
12.3.2推送通知的分类
12.3.3推送通知的发送机制
12.3.4客户端程序实现推送通知的接收
第13章Socket编程
13.1Socket编程介绍
13.1.1Socket的相关概念
13.1.2Socket通信的过程
13.2Socket编程之TCP协议
13.2.1StreamSocket介绍以及TCP Socket编程步骤
13.2.2连接Socket
13.2.3发送和接收消息
13.2.4TCP协议服务器端监听消息
13.2.5实例: 模拟TCP协议通信过程
13.3Socket编程之UDP协议
13.3.1发送和接收消息
13.3.2UDP协议服务器端监听消息
13.3.3实例: 模拟UDP协议通信过程
第14章蓝牙和近场通信
14.1蓝牙
14.1.1蓝牙原理介绍
14.1.2Windows Phone蓝牙技术概述
14.1.3蓝牙编程类
14.1.4查找蓝牙设备和对等项
14.1.5蓝牙发送消息
14.1.6蓝牙接收消息
14.1.7实例: 实现蓝牙程序对程序的传输
14.1.8实例: 实现蓝牙程序对设备的连接
14.2近场通信
14.2.1近场通信的介绍
14.2.2近场通信编程类和编程步骤
14.2.3发现近场通信设备
14.2.4近场通信发布消息
14.2.5近场通信订阅消息
14.2.6实例: 实现近场通信的消息发布订阅
第15章传感器
15.1加速计传感器
15.1.1加速计的原理
15.1.2使用加速度计传感器实例编程
15.2罗盘传感器
15.2.1罗盘传感器概述
15.2.2创建一个指南针应用
15.3陀螺仪传感器
15.3.1陀螺仪传感器概述
15.3.2创建一个陀螺仪应用
第16章联系人存储
16.1联系人数据存储
16.1.1ContactStore类和StoredContact类
16.1.2联系人的新增
16.1.3联系人的查询
16.1.4联系人的编辑
16.1.5联系人的删除
16.1.6联系人的头像
16.1.7实例演示: 联系人存储的使用
16.2联系人编程技巧
16.2.1vCard的运用
16.2.2RemoteID的运用
第17章多任务
17.1后台任务
17.1.1后台任务的原理
17.1.2后台任务的资源限制
17.1.3后台任务的基本概念和相关的类
17.1.4后台任务的实现步骤和调试技巧
17.1.5使用MaintenanceTrigger实现Toast通知
17.1.6使用后台任务监控锁屏Raw消息的推送通知
17.1.7后台任务的开销、终止原因和完成进度汇报
17.2后台文件传输
17.2.1后台文件传输概述
17.2.2后台文件下载步骤
17.2.3后台文件下载的实例编程
17.2.4后台文件上传的实现
第18章应用间通信
18.1启动系统内置应用
18.1.1启动内置应用的 URI 方案
18.1.2实例演示: 打开网页、拨打电话和启动设置页面
18.2URI关联的应用
18.2.1注册URI关联
18.2.2监听URI
18.2.3启动URI关联的应用
18.2.4实例演示: 通过URI关联打开不同的应用页面
18.3文件关联的应用
18.3.1注册文件关联
18.3.2监听文件启动
18.3.3启动文件关联应用
18.3.4实例演示: 创建一个.log后缀的文件关联应用
第19章语音控制
19.1语音合成
19.1.1文本发音的实现
19.1.2SSML语法格式的发音实现
19.1.3实例演示: 实现文本和SSML语法发音并存储语音文件
19.2语音识别
19.2.1简单的语音识别和编程步骤
19.2.2词组列表语音识别
19.2.3SRGS语法实现语音识别
19.2.4实例演示: 通过语音识别来控制程序
19.3语音命令
19.3.1语音命令VCD文件语法
19.3.2初始化VCD文件和执行语音命令
19.3.3实例演示: 通过语音命令来打开程序的不同页面
第20章多媒体
20.1MediaElement对象
20.1.1MediaElement类的属性、事件和方法
20.1.2MediaElement的状态
20.2本地音频播放
20.3网络音频播放
20.4使用SystemMediaTransportControls控件播放音乐
20.5本地视频播放
20.6网络视频播放
第21章地理位置
21.1定位和地图
21.1.1获取定位信息
21.1.2在地图上显示位置信息
21.1.3跟踪定位的变化
21.1.4后台定位
21.2地理围栏
21.2.1设置地理围栏
21.2.2监听地理围栏通知
第22章C#与C++混合编程
22.1C++/CX语法
22.1.1命名空间
22.1.2基本的类型
22.1.3类和结构
22.1.4对象和引用计数
22.1.5属性
22.1.6接口
22.1.7委托
22.1.8事件
22.1.9自动类型推导auto
22.1.10Lambda表达式
22.1.11集合
22.2Windows运行时组件
22.2.1在项目中使用Windows运行时组件
22.2.2Windows运行时组件异步接口的封装
22.3使用标准C++
22.3.1标准C++与C++/CX的类型自动转换
22.3.2标准C++与C++/CX的字符串的互相转换
22.3.3标准C++与C++/CX的数组的互相转换
22.3.4在Windows运行时组件中使用标准C++
开发实例篇
第23章应用实战: Bing在线壁纸
23.1应用实现的功能
23.2获取Bing壁纸的网络接口
23.3壁纸请求服务的封装
23.4应用首页的设计和实现
23.5壁纸列表详情和操作的实现
第24章应用实战: 记账本
24.1记账本概述
24.2对象序列化存储
24.3记账本首页磁贴设计
24.4添加一笔收入和支出
24.5月报表
24.6年报表
24.7查询记录
24.8分类图表
创新与革命一直都是IT行业的灵魂,苹果的iPhone是一个颠覆式的革命者,它重新定义了手机的含义,给予人们一种独一无二的体验,并且打造出了一种前所未有的商业模式,让其iPhone产品,在推向市场后大受欢迎。接下来,谷歌公司收购了Android操作系统,把这场智能手机领域的革命推向了另一个高潮,谷歌的开源策略让Android手机遍地开花,大受追捧。然而,革命总是有人欢喜有人忧,昔日的王者诺基亚,已经失去了当年在手机领域呼风唤雨的地位,Symbian系统的臃肿和落后让诺基亚已经力不从心,微软的Windows Mobile操作系统的市场占有率也日渐下降。创新和革命一直都没有停止过,面对严峻的形势,微软重新审视了手机操作系统的研发,果断地抛弃了落后的Windows Mobile操作系统,研发出了Windows Phone系列手机操作系统。从2010年第一个版本Windows Phone 7开始到2012年Windows Phone 8面世,再到2014年Windows Phone 8.1的重大升级,微软一路开拓创新、精雕细琢,打造出一个强大的手机操作系统和完善的Windows Phone生态圈。2011年4月份,诺基亚和微软正式结盟,诺基亚将会渐渐地放弃Symbian操作系统而转向微软的Windows Phone操作系统; 2013年9月微软宣布计划以72亿美元收购诺基亚的设备和服务部门; 2014年4月微软宣布Windows Phone 8.1操作系统对9英寸以下屏幕设备免费提供。微软对Windows Phone的这些大动作表明了移动平台是微软下定决心要拿下的一块市场,也展现了Windows Phone无限的发展潜力。
Windows Phone是一个年轻的手机操作系统,它是微软面对iPhone和Android的强势,综合地考虑了许多iPhone和Android的优点以及缺点的基础上诞生的,具有无穷的发展潜力。在未来的智能手机操作系统的领域中,Windows Phone将会起着举足轻重的作用。
本书包含哪些内容
本书内容涵盖Windows Phone 8.1手机应用开发的各方面的知识,如控件、布局、应用数据、图形动画、数据绑定、网络编程、多媒体、蓝牙、近场通信、应用间通信、传感器、地理位置、C++编程等。本书讲解全面,实例丰富,深入浅出地介绍了Windows Phone 8.1应用开发的方方面面,最后以两个实战的应用开发例子介绍了一个完整的Windows Phone 8.1的应用开发的过程,并且提供全部的源代码。
如何高效阅读这本书
由于本书的实例代码主要使用C#编程语言开发(C++编程章节使用的是C++编程语言),所以需要读者有一定的C#编程基础。本书的各章节之间有一定的知识关联,由浅至深地渐进式叙述,建议初学者按照章节的顺序来阅读和学习本书; 而对于有一定Windows Phone编程经验的读者,可以略过一些章节,直接阅读自己感兴趣的内容。
如何快速动手实践
本书每个知识点都配有相应的实例,读者可以直接用Microsoft Visual Studio 2013开发工具打开工程文件进行调试和运行。由于微软的开发工具和Windows Phone SDK更新较频繁,所以不能保证最新的开发环境和本书中描述的内容完全一致,要获取最新的开发工具和Windows Phone SDK请关注微软的Windows Phone开发的中文网站(cn)的动态。
本书适合哪些读者
本书适合于Windows Phone 8.1应用开发初学者,也适合其他手机平台的开发者快速地转入Windows Phone 8.1的开发平台,同时对于有一定的Windows Phone 8.1开发经验的读者也有很好的参考学习价值。
由于作者水平有限,Windows Phone 8.1开发知识极其广泛,书中难免存在疏漏和不妥之处,敬请广大读者批评指正。
作者联系方式: zheng(新浪微博@WP林政)
编辑联系方式:
作者2014年6月
微软公司1975年成立。微软的“童年”可谓光芒四射,BASIC语言、DOS、Windows 3.1等不断地惊艳当时高速发展的信息时代。在他成长到20岁时(也就是1995年),发布了Windows 95,随后的几年,他达到一个无人可及的*,那些年他几乎统治了整个IT界和几乎每个人的生活。又过了19年之后,2014年他迎来了新的掌门人——纳德拉(Satya Nadella),面对世界的新技术、新公司、新生活方式的挑战,感受着来自各方面的压力,他为公司提出了全新的策略,简言之就是“移动为先,云为先”。他同时指出: “我坚信,在未来十年,计算将无处不在,智能将触手可及。软件的进化与新式硬件的普及会在其中起到媒介作用,目前我们在工作和生活中从事和体验的很多内容都将实现数字化,甚至整个世界也是如此。可联网设备的数量快速增长、云环境所能提供的海量计算资源,大数据的洞察力,以及机器学习所获得的智能,诸多因素让这一切变为可能。”
接近不惑之年的微软,正在不断地调整以改变自己——从内部人员到产品线,进而到产品设计理念。现在,微软的产品线不仅软件产品异常丰富,而且在硬件领域不断出击,从常用的键盘、鼠标到家用游戏机Xbox、业界最好的体感设备Kinect及随后推出的Surface RT/Surface Pro。2014年,微软更是完成了对著名移动厂商Nokia的收购,从而使公司变成了“软硬”兼备的公司。微软目前拥有数十个著名的产品品牌、数百个优秀的产品、数以千计的先进技术、数万名业界著名人才、数百万个行业技术解决方案以及数百亿美元的现金储备,这些资源在一个敢于面对变革的新CEO领导下,微软像一位围棋高手一样不断变换布局迎接全新的21世纪,这个布局的核心就是“移动为先,云为先”,换言之就是“服务+设备”。
笔者从小就是一个非常“Geek”的人,从装收音机、电视机到给科技杂志投稿,整天畅想着如科幻小说般的未来,这一切伴随着我的少年时代。后来逐步学习各种计算机语言和各种IT技术,希望自己能够修炼成IT界的“绝世高手”。但是我天赋平凡,面对发展迅猛的IT产业,我依然像个无知的孩子,只有不断地学习新的知识。另外,一直以来,在我的内心深处都认为传道授业、教书育人是一件无上光荣的事情。1996年春天,当Windows 95中文版在中国发布后不久,我加入了微软公司,我那时的头衔是“布道师”(Evangelist),虽然不是“老师”,但是我找到了“装老师”的感觉。从主办TechEd、PDC(Build),到在微软研究院和最聪明的科学家一起工作……我在微软经历了人生最美好的时光。2000年,我加入了另外一家伟大的“水果”公司……直到2012年,当Windows 8.0即将发布时,我回到了微软公司,我的职业生涯和这家伟大的公司重新绑定,我相信我选择的未来之路!
清华大学出版社是令人敬仰的出版社,选题精准,作风严谨。小时候,它就是我寻找计算机和技术“武功秘籍”的地方。随着移动互联网的飞速发展,人们的时间被无情地“碎片化”——微信、微博、短信、邮件、网页,等等; 但是我认为要想在技术方面有所作为,踏踏实实地读书并积极地实践是最有效的方式。很荣幸受邀为此微软技术系列图书撰写序言,当我看到这些选题和主要内容时,我迫不及待地恳请编辑务必“赐予”我一套图书,我一定会仔细拜读,我也会推荐给我的业界好友。
北京的雾霾好像越来越严重了,而周末在一个安静的地方阅读一本好书,整个人的“小宇宙”会被提升到另一个维度,大有醍醐灌顶、大彻大悟的感觉。希望您也能和我一样在阅读这套图书时找到这样的美妙感觉……
夏鹏(微软(中国)有限公司)
2014年4月25日深夜
于春雨中的北京
第3章
XAML简介
第3章XAML简介
XAML(Extensible Application Markup Language)是用于实例化.NET对象的标记语言。XAML是微软技术体系里面的UI编程语言,在Windows 8、Windows Phone、Silverlight和WPF这些技术框架下都可以使用XAML的语法来编写程序的界面。那么在Windows Phone的普通应用程序(游戏除外)中,也是使用XAML来编写程序的界面(HTML5/JS的开发模式是使用HTML和CSS的语法来实现界面的编程),所以对XAML语法的理解和掌握是编写Windows Phone应用程序的重要基础。Windows Phone 8.1应用程序中的界面是由xaml文件组成的,和这些xaml文件一一对应起来的是xaml.cs文件,这就是微软典型的CodeBehind模式的编程方式。xaml文件的语法类似于XML和HTML的结合体,这是微软的XAML语言特有的语法结构,本章将介绍有关XAML方面的知识和语法。
3.1理解XAML
XAML是一种声明性标记语言,它简化了为.NET Framework应用程序创建UI的过程,使得程序界面的编程更加简单和简洁。XAML直接以程序集中定义的一组特定后备类型表示对象的实例化,就如同其他的基于XML的标记语言一样,XAML大体上也遵循XML的语法规则。例如,每个XAML元素包含一个名称以及一个或多个属性。XAML文件中的每个元素代表.NET中的一个类,并且XAML文件中的每个属性代表.NET类中的一个属性、方法或事件。例如,若要在Windows Phone的界面上创建一个按钮,则可以用下面的XAML代码来实现:
Button x:Name=”button 1″ BorderThickness=”1″ Click=”OnClick1″ Content=”按钮” /
上面XAML代码中的按钮Button,它实际上是Windows Phone中的Windows.UI.Xaml.Controls.Button类。XAML的属性是相应类中的相关属性,如上例中的Name、BorderThickness实际上是Button类中相应的相关属性。在这句XAML语句中,我们还实现了事件处理程序,Click=”OnClick1″,即XAML支持声明事件处理程序,具体逻辑在其对应的.xaml.cs的后台代码文件的OnClick1方法中。那么XAML文件可以映射到一个扩展名为.xaml.cs的后台代码文件。这些后台代码文件中的部分类包含了XAML呈现层可以使用的事件、方法和属性,以提供强大的用户体验。
编写XAML代码的时候需要注意,声明一个XAML元素时,最好用Name属性为该元素指定一个名称,这样在C#代码里面才可以访问到此元素。这是因为某种类型的元素可能在XAML页面上声明多次,但是如果不显式地指明各个元素的Name属性,则无法区分哪个是想要操作的元素,也就无法通过C#来操作该元素和其中的属性。
XAML语言是有着严格的语法标准的,所以我们在编写XAML的代码的时候需要遵循它的一些规则。下面是声明一个XAML编程必须遵循的4大原则:
(1) XAML是大小写区分的,元素和属性的名称必须严格区分大小写,例如,对于Button元素来说,其在XAML中的声明应该为
Page
x:Class=” PhoneApp.MainPage”
xmlns=””
xmlns:x=””
xmlns:local=”using:HelloworldDemo”
xmlns:d=””
xmlns:mc=””
mc:Ignorable=”d”
Background=”{ThemeResource ApplicationPageBackgroundThemeBrush}”
Grid x:Name=”LayoutRoot”
/Grid
/Page
上面的代码声明了若干个XML命名空间,XAML文档也是一个完整的XML的文档。xmlns特性是XML中的一个特殊特性,它专门用来声明命名空间。一旦声明一个命名空间,在文档中的任何地方都可以使用该命名空间。using:HelloworldDemo表示引用的是应用程序里面HelloworldDemo空间,表示可以在XAML里面可以通过local标识符来使用HelloworldDemo空间下的控件或者其他类。
那么在上面的XAML代码里面,你还会注意到Grid元素并没有一个空间引用的前缀。那Grid元素会被解析成哪一个类呢?Grid类可能是指Windows.UI.Xaml.Controls.Grid类,也可能是指位于第三方组件中的Grid类,或你自己在应用程序中定义的Grid类等。为了弄清实际上希望使用哪个类,XAML解析器会检查应用于元素的XML命名空间。要弄清楚其运行的原理,我们先来看一下两个特别的命名空间:
xmlns=”.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=”.microsoft.com/winfx/2006/xaml”
这段标记声明了两个命名空间,在创建的所有Windows Phone的XAML文档中都会使用这两个命名空间:
.microsoft.com/winfx/2006/xaml/presentation是Windows Phone核心命名空间。它包含了大部分用来构建用户界面的控件类。在该例中,该名称空间的声明没有使用命名空间前缀,所以它成为整个文档的默认命名空间。所以没有前缀的元素都是自动位于这个命名空间下。
.microsoft.com/winfx/2006/xaml是XAML命名空间。它包含各种XAML实用特性,这些特性可影响文档的解释方式。该名称空间被映射为前缀x。这意味着可通过在元素名称之前放置名称空间前缀x来使用该命名空间,例如上面代码中的x:Name=”LayoutRoot”。
正如在前面看到的,这两个XAML的命名空间的名称和任何特定的.NET名称空间都不匹配。XAML的创建者选择这种设计的原因有两个。第一个原因,按照约定,XML文档命名空间通常是URI。这些URI看起来像是在指明Web上的位置,但实际上不是。如果使用URI格式的命名空间,那么不同的XML文档格式就会互相区分开来,作为唯一的标识符,表示这是创建在某个特定环境下的XML文档,如Windows Phone的XAML文档就是基于Windows Phone的.NET类库的。
另一个原因是XAML中使用的XML命名空间和.NET命名空间不是一一对应的,如果一一对应的话,会显著增加XAML文档的复杂程度。此处的问题在于,Windows Phone包含了多种命名空间,所有这些命名空间都以Windows.UI.Xaml开头的。如果每个.NET命名空间都有不同的XML命名空间,那就需要为使用的每个控件都指定确切的XML命名空间,这会使XAML文档变得混乱不堪。所以XAML将所有这些.NET命名空间组合到单个XML命名空间中。因为在不同的.NET命名空间中都有一部分.NET的类,并且所有这些类的名称都不相同,所以这种设计是可行的。
命名空间信息使得XAML解析器可找到正确的类。那么上面的Grid元素没有前缀,那么就会使用默认的空间名,解析器就会到Windows Phone的Windows.UI.Xaml开头的空间下去查找相关的类,最后会查找到Windows.UI.Xaml.Controls.Grid类与Grid元素匹配起来。
3.2.2对象元素
XAML的对象元素是指XAML中一个完整的节点,一个XAML文件始终只有一个根元素,在Windows Phone里面通常会是Page作为根元素,那么这个根元素就会是当前页面的最顶层的元素。在XAML中,除了根元素之外的所有元素都是子元素。根元素只有一个,而子元素理论上可以有无限多个。子元素又可以包含一个或多个子元素,某个元素可以含有子元素的多少由Windows Phone中具体类决定。
对象元素语法是一种XAML标记语法,它通过声明XML元素将Windows Phone的类或结构实例化。这种语法类似于如HTML等其他标记语言的元素语法。对象元素语法以左尖括号(
Button Content=”这是按钮”/
Button Content=”这是按钮”/Button
3.2.3设置属性
XAML中的属性是可以用多种语法去设置的,那么不同的属性类型也会有不同的设置方式,并不是全部的属性设置都是通用的。总的来说,可以通过下面的4种方式来设置对象元素的属性:
(1) 使用属性语法;
(2) 使用属性元素语法;
(3) 使用内容元素语法;
(4) 使用集合语法(通常是隐式集合语法)。
这4种设置属性的方法,并不是对所有属性都适用的,有些属性会只适合用一种方式来设置,有一些属性则可以使用多种方式来进行设置,这是取决于属性对象的特性的。下面我们详细地看一下这4种属性的设置方法和相关的示例。
1. 使用属性语法设置属性
大部分的对象元素都可以使用属性语法来设置,这也是最常用的属性设置的语法。使用属性语法设置属性的语法格式如下所示:
objectName propertyName=”propertyValue” …/
或者
objectName propertyName=”propertyValue”
…
/objectName
其中,objectName是要实例化的对象元素,propertyName是要对该对象元素设置的属性的名称,propertyValue是要设置的值。
下面的示例使用属性语法来设置Rectangle对象的Name、Width、Height和Fill属性。
Rectangle Name=”rectangle1″ Width=”100″ Height=”100″ Fill=”Blue” /
那么,XAML分析器会把上面的代码解析成为C#的类,当然也可以直接用C#的代码来实现对象元素和它的属性的设置,下面的C#代码可以实现等效的效果:
Rectangle rectangle1 = new Rectangle();
rectangle1.Width=100.0;
rectangle1.Height=100.0;
rectangle1.Fill = new SolidColorBrush(Colors.Blue);
2. 使用属性元素语法设置属性
属性元素语法是指把属性当作一个独立的元素来进行设置,如果要用属性元素语法去设置属性,那么该属性的值也必须是一个XAML的对象元素。那么使用属性元素语法,就需要为要设置的属性创建XML元素,让给在这个元素节点中设置属性的值。这些元素的形式为
Object
Object. property
PropertyValueAsObjectElement
/ Object. property
/ Object
下面的示例使用属性元素语法来设置Rectangle对象元素的Fill属性。因为Rectangle对象的Fill属性的值其实就是一个SolidColorBrush类型的值,所以可以需要声明一个SolidColorBrush的对象来表示Fill属性的值。在SolidColorBrush中,Color使用属性语法来设置。
Rectangle Name=”rectangle1″ Width=”100″ Height=”100″
Rectangle.Fill
SolidColorBrush Color=”Blue”/
/Rectangle.Fill
/Rectangle
如果使用属性语法来编写上面的代码,则等同于下面的代码:
Rectangle Name=”rectangle1″ Width=”100″ Height=”100″ Fill=” Blue ”
/Rectangle
3. 使用内容语法设置属性
使用内容语法设置属性是指直接在对象元素节点内容中设置该属性,忽略掉该属性的属性元素,相当于把该属性的值看作是当前对象元素的内容。那么这个内容可以是一个或者多个对象元素,这些对象元素也是完全独立的UI控件。那么内容语法和属性元素语法的区别就是,内容语法比属性元素语法少了Object. Property的属性表示。那么内容语法需要较为特殊的属性才能支持,如常见的有Child属性、Content属性都是可以使用内容语法去进行设置的。例如下面的示例使用内容语法设置Border的Child属性:
Border
Button Content=”按钮”/
/Border
如果内容属性的属性也支持“松散”的对象模型,在此模型中,属性类型为Object类型或者为String类型,则可以使用内容语法将纯字符串作为内容放入开始对象标记与结束对象标记之间。下面的示例使用内容语法直接用字符串来设置TextBlock的Text属性:
TextBlock你好!/TextBlock
4. 使用集合语法设置属性
上面讨论的属性都是非集合的值的,如果属性的值是一个集合,那么就需要使用集合语法去设置该属性。使用集合语法来设置属性是一种比较特殊的设置方式,使用这种方式的元素通常都是支持一个属性元素的集合。可以使用C#代码的Add方法来添加更多的集合元素。使用集合语法设置元素实际上是向对象集合中添加属性项,如下所示:
Rectangle Width=”200″ Height=”150″
Rectangle.Fill
LinearGradientBrush
评论
还没有评论。