科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Vista 开发新技术之 XAML 简介

Vista 开发新技术之 XAML 简介

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在下一个版本的Windows操作系统Vista中,其新添加的表示子系统的WPF为开发人员提供了强大的新功能。

作者:开发之家 来源:天极网 2007年11月19日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
提示:我们可以通过"开始"-"所有程序"-"Microsoft Windows SDK"-"Tools"-"XAMLPad"打开XAMLPad工具,它是一个非常出色的、用来检测XAML代码的工具。除了为开发人员提供一个基本的编辑窗口外,还提供了一个用来报告错误的信息提示窗口和一个"所见即所得"的预览窗口。

  我们在前面曾提及过,只要是XAML可以实现的功能,我们都可以通过相应的程序代码完成。为什么会存在上述的情况呢?这是因为XAML和WPF类库紧密相关的,每种可以在XAML中使用的元素其实都是一个类,例如<Button>元素就与类库中的System.Windows.Controls.Button相对应。在这里要特别提及的是System.Windows.命名空间中声明的UIElement和ContentElement两个基类的派生类,Control类是System.Windows.UIElement的派生类之一,所有的公共用户接口控件(例如按钮、滚动条、列表框和文本框等)均源于Control类。而从System.Windows. ContentElement派生的类包括Bold和Italic。

  正是因为上述的继承关系以及XAML中的每个元素均代表一个WPF类,所以XAML也存在一些面向对象体系结构的特性。比方说一个元素派生自另外的一个XAML元素,那么该元素将继承其父元素的特性。例如,System.Windows.Controls.Button派生自System.Windows.Controls.ButtonBase,System.Windows.Controls.ButtonBase派生自System.Windows.Controls.ContentControl,而System.Windows.Controls.ContentControl又派生自System.Windows.FrameworkElement,最后System.Windows.FrameworkElement才派生自System.Windows.UIElement。这样的一个继承结构是相当的复杂的,而Button元素通过上述方式的层层继承后,自身所包含的属性已经是非常少了,就连Button元素中的Width和Height属性都是继承自System.Windows.FrameworkElement类中。

  上面我们通过一定的篇幅探讨了XAML中的元素,那么XAML元素中的属性是如何实现的呢?其实就同上面讲述的那样,一个XAML元素代表的是一个对应的WPF类,那么XAML元素的各个属性就是对应的WPF类的各个属性。属性在.NET框架中总是扮演着重要的角色,如果曾经接触过.NET编程的话,就会知道我们经常会使用属性窗口来设置控件的属性。就算您没有任何的.NET框架的编程实践,您通过其他面向对象的语言学习也应该知道属性是类的成员,就像字段和方法一样。在本章就不探讨属性的概念和实现过程了,它已经超出了本章的范围。如果有需要的话,您可以自行参考相应的C#书籍。我们知道属性存在三种,分别是只读属性、可写属性和读/写属性。一个名为Background的读/写属性基本上等同于set_Background和get_Background这样的一对对称方法。而在XAML中的某个元素中,我们只能访问对应的WPF类中公开的属性,也就是该类中修饰符为public的属性,或者同时具备get和set方法的属性。对于类中的只读属性,我们是无法在XAML元素中直接对其进行访问和使用的。

  提示:我们也可以将自己编写的类用作XAML的元素,就像XAML的中文名称为可扩展应用程序标记语言那样,任何一个具有公共的无参数的构造函数以及可设置属性的类均可在XAML中使用。

  XAML的优势

  如同XUL(eXtensible User-interface Language-可扩展用户界面语言)、HTML和FELX等用来创建具有丰富动态特性用户界面的标记语言一样,XAML也采用了上述语言类似实现的机制。这些标记语言都具备快速构建一个程序界面且较容易修改界面布局的特性。除此之外,使用它们构建一个用户界面的布局时的代码要比使用传统的编程语言实现少的多。例如我们可以在XAML中只使用一行代码就可以创建一个Button对象,并且设置了Button相应的属性和事件,代码如下:

以下是引用片段:
<Button Click="OnClickHandler" Background="Green" Content="Submit" />

  如果要采用C#或VB.NET来构建和上述相同的Button对象时,你需要编写如下的代码:

以下是引用片段:
Button myBtn = new Button();
myBtn.Background = Brushes.Green;
myBtn.Text="Submit";
myBtn.Click += new System.EventHandler(OnClickHandler);

  提示:如果你完全使用程序代码来实现WPF程序的话,那么可以使用兼容的.NET语言来创建呈现的布局和应用程序逻辑。但是如果应用程序使用了XAML进行描述的话,那么应用程序逻辑必须使用C#和VB.NET来编写,其他的.NET语言现在还不被支持。

  对于一些具有.Net Windows  Froms和Web Form编程经验的开发人员来说,使用C#语言构建一个Button对象是非常容易的。但是如果构建的用户界面包含很多的类似界面对象时,那么其实现的过程还是那么轻松吗?很显然这样做是非常繁杂的,即不直观也不现实。

  在上面的那几个标记语言中,HTML缺乏编程的功能以及对应的控件,它的惟一用途就是对页面文档进行编排。如果你要添加一些交互的功能(例如提示用户的输入信息错误),则必须通过javascript脚本语言来编写相应的逻辑。为了解决HTML存在的问题,XAML和其它新一代的声明性标记语言,都提供了后端的语言支持。虽然XAML将用户界面从应用逻辑中分离了出来,但是在WPF中依然提供了一个良好的机制使得它们可以相互作用和影响。这种分离具备很多好处,这其中包括设计人员可以更加容易地构建程序界面,而且程序开发人员在修改逻辑代码时,对前台的界面没有丝毫的影响,反之亦然。

  在制作网页时,通常都会有专门的美工人员使用Dreamweaver等软件来设计页面的编排和站点的整体样式。为此,对于那些使用过HTML或其它标记语言的Web页面设计人员来说,XAML对他们来说是非常简单和直观的。他们仅需花费少许的时间和精力学习,就可以直接跳转到XAML上进行WPF程序的界面设计。这样也就减轻了.NET开发人员的负担,使得他们可以完全专注于应用程序逻辑的设计上。

  通常我们在设计页面的编排时,一般是用Adobe公司的Dreamweaver软件。它提供了一种便捷的方式来设计和编排页面,并自动生成对应的HTML代码。目前为止,微软也提供了一个处于测试阶段的Interactive Designer,使用它我们可以快速地创建一个WPF程序,而且以一种可视化的操作方式对XAML页面进行设计和编排,它会自动生成相应的XAML代码。除此之外,我们还可以使用其它的一些第三方工具进行XAML的开发。相信到Vista正式分布后,将会越来越多的工具支持XAML开发。

  XAML是可扩展的,正如它的名字指明的那样。开发人员可以创建自定义的控件、元素和函数来扩展XAML。而且由于XAML各元素在本质上就是WPF类的映射,所以开发人员可以很轻松地使用面向对象的技术对XAML元素进行扩展。也就是说我们可以开发一些自定义控件和组合元素,并将它公开给用户界面设计人员和其它的开发人员使用。

  XAML是一种纯正的、用来描述用户界面构成元件和编排方式的标记语言。尽管有部分的XAML语法具备程序设计语言的特性(例如XAML中的Trigger和TRansform),但是XAML并不是一种用于程序设计的语言,它的功能也不是为了执行应用程序逻辑。

  XAML是一种解析性的语言,尽管它也可以被编译。微软推荐XAML被编译成BAML(Binary Application Markup Language-二进制语言程序标记语言)。XAML和BAML都可以被WPF解析,并且将以一种和HTML相似的方式进行界面的呈现。但是和HTML不同的是,XAML是强类型化的。也就是说,HTML会忽略那些它不能识别的元素和属性,而XAML必须在识别所有的元素和属性的情况下,才对页面进行呈现。尽管在XAML中各个属性都是以一个个的字符串(例如Background)表示的,但是这些字符串实际上代表的是WPF中的对象,只有被WPF识别的对象才可以作为元素的属性,所有我们说XAML是强类型化的。

  还有一点是我们反复强调的,XAML并不是HTML。尽管XAML在元素的声明、程序样式的设置和指定事件处理程序上都和HTML非常类似,但是XAML是基于XML的,它是WPF的外在表现形式。而HTML主是一种标记语言,仅仅是用来为浏览器呈现页面内容。XAML除了用来呈现信息和请求用户输入等基本的功能外,它还包含了一些高级的特性,例如它提供了对动画和3D众多方面的支持。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章