随着技术的不断发展,使用者对应用程序的界面体验提出了更高的要求,为了应对越来越复杂的界面设计需求和有效的简化界面开发过程,微软公司在其应用程序的开发技术当中引入一套新的应用程序界面描述语言,这就是XAML。

XAML是eXtensible Application Markup Language的英文缩写,相应的中文名称为可扩展应用程序标记语言。与很多读者所熟知的HTML相似,XAML的作用同样也是用来对应用程序的界面进行描述的,并且相比提供了丰富的界面元素和便于定位扩展的语法。

本章将从XAML基础说起,重点介绍适用于开发Windows应用商店应用所使用的XAML语法,读者通过对本章的学习可以为后面要讲解的内容打好基础。

3.1 XAML的起源

在实际开发工作中,设计者和开发者一般都会使用两种不同的软件工具来完成应用程序的界面设计和代码编写,由于传统应用程序的界面布局和逻辑代码是集成在一起的,因此对于开发传统应用程序而言,开发人员往往是通过参考设计人员给出的界面示意图和说明文档对应用程序的界面进行开发,而无法完全让设计人员也参与到软件开发中来,这往往会使开发出来的应用界面与实际设计之间产生一定的偏差。如果在开发过程中反复修改应用界面,会降低开发人员的工作效率,并对项目进度产生影响。

为解决这一问题,微软在其应用程序开发技术中引入了XAML,使用XAML对应用程序的界面进行描述,可以将应用程序开发中的界面设计和逻辑代码独立分开。设计人员在使用熟悉的软件工具对应用程序界面进行设计的同时,软件工具会实时地将所设计的应用界面用XAML描述出来。这样在设计人员完成对应用界面的设计之后,可以把应用界面所对应的XAML代码交给开发人员应用到项目开发当中,同样,开发人员对XAML所做的更改也会反映在设计人员所熟悉的设计界面当中,从而去除了细节上的反复沟通,减少了错误的产生。

3.2 XAML基础知识

由于XAML是基于XML(可扩展标记语言)的语法规则定义而来的,其本身就是一个组织良好的XML文档,因此XAML文档的内部组成结构与XML非常相似,包括元素的定义格式和属性的设置等。另外,XAML也具有广泛的可扩展性,允许开发人员创建自定义控件、事件和方法等。

在本节中,我们将介绍XAML语言中的一些基础知识,首先是一个完整的XAML文件的组成部分,包括命名空间的声明、元素的定义、元素的属性设置、用于属性赋值时的标记扩展和数据类型转换器;然后介绍XAML中的资源字典,包括资源字典的分类以及如何进行资源的引用、重用和合并;最后将对XAML中的事件以及依赖项属性和附加属性进行讲解。

3.2.1 命名空间

XAML中的命名空间(NameSpace)和C#代码中的using及VB.Net代码中的Imports作用相似,当在XAML文件中定义元素时,需要使用命名空间提前对元素的类库进行引用声明。

通过在Page元素的开始标签中加入"xmlns:命名空间前缀"格式的属性并赋值上一个URI来声明一个命名空间,其中命名空间前缀规定了XAML文件中定义的元素或元素的属性应该包含在相应的命名空间内,URI表示唯一标识符。例如,在Page元素中声明一个前缀为x、URI为"http://schemas.microsoft.com/winfx/2006/XAML"的命名空间,代码如下所示:

<Page xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

</Page>

在声明整个XAML文档的默认命名空间时,可以不加命名空间前缀。如下例所示:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/XAML/presentation">

</Page>

这样,XAML文件中那些没有前缀的元素或属性都属于默认命名空间。

需要注意的是,命名空间的声明要放在XAML文件的Page元素中,而且一个命名空间的前缀名不要与其他的命名空间前缀重名。

3.2.2 元素定义

在XAML中,一个元素被看做是一个对象。根据XAML语法,可以通过如下方法来定义元素。

(1)直接定义

一个起始标签和一个结束标签:<元素名>…</元素名>。这种定义元素的方式是以标签<元素名>开始,以标签</元素名>结束,开始标签和结束标签之间的XAML代码表示这个元素的内容。例如,定义一个Button元素,对应的XAML代码如下所示:

<Button>...</Button>

其中,"<Button>"是开始标签,"</Button>"是结束标签,Button是元素名称,省略部分表示Button元素的内容。

此外,如果元素不包含其他内容,就可以使用一个自结束标签来定义该元素,其语法格式如下所示:

<元素名 />

(2)使用属性元素方式定义元素

有些元素的属性值并不是基础元素,可以通过定义属性元素来设置属性的值,其语法格式如下所示:

<元素名>

<元素名.属性名>

...

</元素名.属性名>

</元素名>

例如,要向Canvas画布中添加一个矩形并填充成蓝色背景,那么就可以将矩形的Fill属性定义成Rectangle.Fill元素来设置这个矩形,对应的XAML代码片段如下所示:

<Canvas>

<Rectangle>

<Rectangle.Fill>

<SolidColorBrush Color="Blue"/>

</Rectangle.Fill>

</Rectangle>

</Canvas>

这里使用SolidColorBrush(纯色画刷)来初始化Fill属性,并且将画刷的颜色设置为蓝色。

需要注意的是,XAML中元素和属性的名称是区分大小写的。例如,如果将TextBox写成textbox,XAML语法解析器将提示错误信息"Windows应用程序项目中不支持textbox"。

Win10系列:UWP界面布局基础1的更多相关文章

  1. Win10系列:UWP界面布局基础8

    路由事件 XAML不仅继承了传统的事件处理方式,还引入了一个增强型事件处理机制:路由事件(RoutedEvent).路由事件和传统事件的不同是:路由事件允许一个对象触发事件后,可以同时拥有多个事件接收 ...

  2. Win10系列:UWP界面布局基础7

    2.附加属性 有一些XAML元素,其自身的属性大多是在其它的元素中声明和使用的,该元素本身却很少使用,这些在其他元素中声明和使用的属性被称为附加属性(Attached Properties).附加属性 ...

  3. Win10系列:UWP界面布局基础4

    类型转换 前面讲到过,在定义元素时可以通过Attributes特性方式为其设置属性并为属性赋值,在实际开发中所赋予的值可能和属性本身的数据类型不相符,这时XAML解析器就会使用类型转换器(Type C ...

  4. Win10系列:UWP界面布局基础2

    属性设置 在面向对象程序开发中,所提及的属性通常指的是对象的属性.在XAML代码中,定义元素时也可以为其设置属性,例如对于一个TextBox元素,有背景属性.宽度属性和高度属性等.为了满足实际应用的需 ...

  5. Win10系列:UWP界面布局基础12

    画刷 画刷(Brush)用于为图形元素填充颜色.在XAML中,画刷有许多属性,其中较常使用的是Fill属性和Stroke属性,Fill用于填充图形的背景色,而Stroke用于设置图形的线条颜色. 在实 ...

  6. Win10系列:UWP界面布局基础11

    样式继承 为了使样式便于维护及重复使用,可以在一个样式上引用其他的样式,这就是样式继承.样式继承的方法是:在Style元素的BasedOn属性上使用StaticResource标记扩展来引用被继承的样 ...

  7. Win10系列:UWP界面布局基础5

    (2)编写后台代码访问资源 下面通过一个例子来演示如何编写后台代码引用资源.新建一个Windows应用商店的空白应用程序项目,将其命名为AccessResourceApplication,打开项目下的 ...

  8. Win10系列:UWP界面布局基础3

    在实际项目开发中,为控件属性赋值时经常会遇到属性值在设计时处于未知状态,而只有在应用程序运行时才能获取到.这种情况下,直接赋值方法是无法满足的,可以使用XAML标记扩展(Markup Extensio ...

  9. Win10系列:UWP界面布局基础9

    在XAML中,样式.模板.画笔和动画等都被看做是资源,它们最终的作用都是相同的,就是让设计人员可以使用这些资源创建更好的视觉效果,对其设计的产品外观进行标准化统一,那么如何使用这些资源并组织和重用呢, ...

随机推荐

  1. ASP.net MVC模式介绍(一)

    一.ASP.NET 支持三种不同的开发模式:Web Pages(Web 页面).MVC(Model View Controller 模型-视图-控制器)表现层.Web Forms(Web 窗体) mv ...

  2. C#发起HTTP请求

    浏览器能看到的数据  用后端模拟请求都能获取到  如果拿不到 看看是不是请求参数哪里没设置 刚好服务器检查了这个参数 string url = ""; string para = ...

  3. cocos2dx 3.x 集成protobuf

    vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程也可参考. 主要参考博文地址<cocos2dx 3.x C++搭建protobuf环 ...

  4. RNA Spike-in Control(转)

    Spike-in Control:添加/加入(某种物质)的对照(组)在某些情况下,待检验样本中不含待测物质或者含有但是浓度很低,为了证明自己建立的方法能对样本中待测物质进行有效的检测,可在待检样本中加 ...

  5. 11月26日11月26日,周日在家practice.基本了解了layouts and Rending (guides); gem font-awesome-rails的实例用法;建立路径route, member..do的实际例子

    http://fontawesome.io/examples/ content_tag(:i,"", class:"fa fa-lock fa-spin fa-lg fa ...

  6. SQL的其他用法

    SQL语言的其他用法 --求半径2米.高3米的圆柱体体积 select PI() select SQUARE(2)*PI()*3  '体积' --求字符串‘adsgdajfhwruhwuiriutoo ...

  7. linux动态库

    1.编写动态库函数接口 gcc -fPIC -shared -o libfunction.so funtion.c 2.写头文件 3.测试 gcc test.c -L. -lfuntion -o ru ...

  8. Confluence 6 创建一个项目空间

    火星移民小组的程序需要一个地方能够调出他们任务的相关关键信息和资源,你的任务就是帮助他们实现和管理这个需求.这部分是比较容易实现的,因为这些信息需要让空间项目组中完全可见. 这样的话,你就可以设置项目 ...

  9. Mysql中Join用法及优化

    Join的几种类型 笛卡尔积(交叉连接) 如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录.在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者直接用f ...

  10. 小程序用户openid设置放缓存

    wx.setStorageSync('openid', res.data.data.openid),设置     var openid = wx.getStorageSync('openid')获取