设为首页 收藏本站
查看: 933|回复: 0

菜鸟学Windows Phone 8开发(2)——了解XAML

[复制链接]

尚未签到

发表于 2015-5-22 10:26:27 | 显示全部楼层 |阅读模式
本系列文章来源MSDN的 面向完全新手的 Windows Phone 8 开发 主要是想通过翻译本系列文章来巩固下基础知识顺带学习下英语和练习下自己的毅力
本文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-4-Introduction-to-XAML 源代码:http://aka.ms/absbeginnerdevwp8

这节课,我想讨论XAML语法(syntax),希望你有对前面写的代码有印象,通过看那些代码是很容易理解XAML基本功能的,但是本节我想指出我们不能第一眼就看出的特性和功能。

往高点看,我们今天这节课的计划如下:
1、我们今天将通过将XAML和C#比较来讨论XAML的本质和目标;
2、一些特别的功能和我们不能第一眼就看出来的隐藏功能;

我今天的目标是通过本堂课能让大家对XAML有一个足够的了解,甚至能在我还没解释的时候猜出他的意思。

一、什么是XAML
在前面的课中,我们对XAML做了个简单的讲解,他看起来和HTML有点相同,这绝不是偶然,因为XAML本质就是XML,叫扩展标记语言。我会花点时间解释他们的关系,但是更进一步说XML看起来像HTML以至于他们都继承自同一个祖先,HTML是专门用户构建web页面的文章,xml是更通用的,我的意思是你可以用于你设计的任何目的,并且还可以按你需要定义他的名称和属性,在过去开发者常用他来保存应用程序的设置信息或者用它来在两个不同的系统之间传递数据。为了使用xml你需要定义一个架构他包括特定属性和元素的名称,架构就像合约,xml的使用者和创建者都要遵守(abide by)这个合约为了更好的进行通信,一个架构对于xml是非常重要的,记住它我们等下会用到它。

咋看一下,XAML是有特殊用途的xml,通过看我们最近的例子中的XAML,它在手机界面定义了我们的用户界面。在这方面他看起来像HTML,但是他们有很大的不同,XAML实际上是用于创建类的实例和设置属性的值得,例如在前面的课程中我们用XAML定义了一个button控件。

DSC0000.png

上面的代码和以下在c#中的代码是等效的。
DSC0001.png
我已经在MainPage类的构造函数中添加了C#代码,我将花点时间讨论MainPage.xaml和MainPage.xaml.cs文件的关系,我们看到我们能写c#代码来定义行为,我仅仅是在MainPage类的构造函数里面写的代码。

这时候我们有两个button一个用xaml定义一个用c#代码定义。
DSC0002.png

但是我们只能看到一个button,因为我们在构造函数里面创建的button是呆在我们用XAML代码创建的button的位置,为了证明这个我们需要添加一个Margin属性,让他离左边210像素。
DSC0003.png

Margin属性的类型是Thickness,一个代表4个方向(dimentsion)的通用类。在这个例子中我们创建了一个新的Thickness类并传递第一个参数210.我们运行后看到:
DSC0004.png
现在我们能看到两个button
现在最大的疑问是我们创建了两个几乎相同的button,一个使用xaml一个使用c#。
xaml的像这样:

c#我们创建一个button实例。
我们能在button元素上面设置属性也可以在button实例上设置属性。
重要的是XAML是一种更简单和简洁的语法来创建类的实例和设置类的属性。我们需要花10行c#代码而xaml只需要一行,
更大的好处是,使用XAML能及时在设计器中看到我的改变,使用c#代码创建的东西我需要运行这个程序才能看到我的微调(tweak)。

2、类型转换器介绍
如果你有一双敏锐的眼睛,你可能发xaml和c#代码在设置HorizontalAlignment属性的时候是不一样的,如果你尝试设置:
myButton.HorizontalAlignment="left";
你将会产生一个编译错误,xaml解析器将扮演一个转换器将string类型的left转换成System.Windows.HorizontalAliginment.Left的枚举类型,转换器是一个将string类型转换成一种强类型的来,在windows 8的api中有很多这样的类,我们在整个系列中都会用到他们。HorizontalAlignment属性是微软开发者用一个特殊的属性标记在源代码中,他是一种信号会通知xaml解析器尝试将string转换成枚举的值,为了有趣,我们可以看一下如果我们有拼写错误的情况:
DSC0005.png

你将看到一个编译错误,因为xmal解析器不能将这个string类型的匹配到System.Windows.HorizontalAlignment.Left.枚举值。
因此,XAML的第一个特性是使用简洁(succinct)的代码创建类的实例,在windows8应用程序中它通常用于构建用户界面元素,但是XAML不仅仅是用于创建界面元素,我们还可以使用其他技术让他用于其他目的。

3、理解XAML命名空间定义
接下来,我们将讨论在ManiPage.xaml文件顶部的代码。
DSC0006.png

看到这里的时候你肯定会想起我前面说的xaml架构(schema),它是xaml的一部分,对于这个列子它们是在哪里遵守了这个架构呢。

从第3行到第8行,有6个架构,每一个都是用xmlns属性定义的,第3行的第一个架构是默认的命名空间,换句话说它是没有冒号(colon)在冒号后面也没有单词,像第4行到第8行那样。
接下来从第4行到第8行的命名空间将用名字和冒号组合,这很清楚,:x和:phone是命名空间,和架构(之前说的合约)关联,在MainPage.xaml中的其余代码中的元素或属性必须遵守至少一个架构。换句话说如果我们定义了不在上述命名空间中的属性或元素,我们就不能确保我们的编译器能正常的解析我们的代码将程序运行起来。
例如下面的例子:
  

我们将希望grid元素和属性是默认命名空间(第3行)中的架构。然而x:是第4行中的机构。
我有一个想法,我们将地址复制到浏览器打开,我们了解更多的标记语言。
  http://schemas.microsoft.com/winfx/2006/xaml/presentation


DSC0007.png

什么?我们不能打开它,那是因为这个架构地址是没有发表的。因此我们不能通过url访问它。相反架构是一个简单的唯一名字。像我们在c#中的命名空间用于区分在不同命名空间下面可能相同的类名,架构用于区分类名,他就像一个姓或者别名。这个用于命名空间区分的url我们应该认为他是一个uri(通用资源标识符)而不是一个定位符,xml命名空间将用于不同的应用程序,windows 运行时xaml解析器或将他变为可执行的代码,然而visual studio和blend或将他们变为一种设置展现。

因此这第二个定义的命名空间定义的是一个匹配,x:是属于 http://schemas.microsoft.com/winfx/2006/xaml架构,因此任何一个以x:前缀开始的属性或元素都是遵守这个架构的。

但是有什么不同呢?他是很微妙的,第二个架构定义了XAML的内在规则,第一个架构定义了Windows 8特定用途的规则或合约,换句话说我们能直接使用Grid、Button、MediaElement等空间元素而不是使用一个前缀那是因为这些都定义在默认的命名空间中。
你可以看到第5行和6行定义的命名空间和架构Phone和Shell是使用了和其他不同的URI(通用资源标识符),其中一个是使用了我们安装Windows Phone API的时候安装在我们电脑上的Microsoft.Phone CLR程序命名空间程序集。在最上面的一行能看到:

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69487-1-1.html 上篇帖子: Windows 8 Platform (三) Windows 8 Developer Preview 下篇帖子: Windows 8 Metro中文件的操作及访问(读写删除复制)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表