随着技术的不断发展,使用者对应用程序的界面体验提出了更高的要求,为了应对越来越复杂的界面设计需求和有效的简化界面开发过程,微软公司在其应用程序的开发技术当中引入一套新的应用程序界面描述语言,这就是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. [osg][opengl]透视投影的参数Perspective

    gluPerspective这个函数指定了观察的视景体(frustum为锥台的意思,通常译为视景体)在世界坐标系中的具体大小,一般而言,其中的参数aspect应该与窗口的宽高比大小相同.比如说,asp ...

  2. 第 8 章 容器网络 - 057 - macvlan 网络隔离和连通

    macvlan 网络隔离和连通 验证 macvlan 之间的连通性. bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4. 即:同一 macvlan 网络能通信. bb ...

  3. 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形网格添加分页

    jQuery EasyUI 树形菜单 - 树形网格添加分页 本教程展示如何向带有动态加载特性的树形网格(TreeGrid)添加分页. 创建树形网格(TreeGrid) 启用树形网格(TreeGrid) ...

  4. idea ----> 使用idea工具整合mybaiti时出现的问题总结

    使用idea测试mabtis实例时出现  java.lang.IllegalArgumentException: Mapped Statements collection does not conta ...

  5. English trip V1 - 21. I dreamed dream Teacher:Corrine Key: past tense(过去式)

    In this lesson you will learn to describe an experience.  本课将会学习描述一次经历 课上内容(Lesson) 词汇(Key Word ) # ...

  6. css图片的全屏显示代码-css3

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  7. Building designing UVA - 11039

    先取正的和负的绝对值较小者为开头 .然后交替从正负数中取绝对值最小但比上一个大的. 证明: 1.开头选正负数中绝对值较小的:否则能再多放1个. 2.交替选的时候选最小的符合条件的:如果大的符合,换小的 ...

  8. p1470 Longest Prefix

    原本就想到dp,可是是我的思路是在串的各个位置都遍历一次set,看dp[i-st[k]]是否为1且前length(st[k])是st[k].这样200000*200*10会超时.更好的办法是在i位取前 ...

  9. apply、call

    call(),apply() 1.每个函数都包含两个非继承而来的方法:call()和apply() 2.在特定的作用域内调用函数,等于设置函数体内的this对象,以扩充函数赖以运行的作用域 3.app ...

  10. Apache Hadoop Operations at Scale

    book: Hadoop Operations,A Guide for Developers and Administrators Apache Hadoop Operations at Scale ...