闲话WPF之二(XAML概述)

简介:

在我开始看WPF文档开始的几天里,脑子里形成了一种错误的想法:WPF不就是XAML码?当时的感觉就是郁闷啦,我学习WPF还得弄这个东西。给人的第一感觉就是WPF很复杂。虽然对WPF的熟悉和了解还不是特别多,但现在已经知道这确实是一种错误的想法。

Charles Petzold先生曾有一篇文章介绍了WPF、XAML的一些关系(The Two APIs)。文章中说明了WPF为什么很复杂:因为WPF有两套API,一套用于普通的编码访问(比如C#、VB.NET等其中.NET支持的语言。而另外一套就是基于XML的API,被称为XAML(Extensible Application Markup Language)。

XAML实现UI代码和应用程序逻辑代码的分离。在.NET 3.0和Windows Vista中,XAML与WPF一起建立整个的UI。由于XAML是基于XML的,所以每个XAML代码都肯定是一个完整的XML文件。XAML继承了XML所有的定义和规则。XAML与其他XML扩展不同之处就是他所表示的意义。每个XAML元素是一个.NET CLR类。基于XML使得我们非常容易扩展和操作XAML。利用XAML的WPF这种关系,开发人员可以单独的设计漂亮的UI,也许真正的美工会更多的出现。我们可以把程序逻辑写在单独的文件或者是内联嵌入到XML文件。 

在XAML中使用得最多的XML功能应该有三个:命名空间、属性和子元素。 

先看一个简单的XAML的例子:

<Window x:Class="FirstXAML.Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

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

    Title="FirstXAML" Height="200" Width="300"

   >

  <Canvas>

  </Canvas>

</Window>

其中的xmlns就是XML中的名字空间,在W3C中xmlns是如下定义的:

XML namespaces provide a simple method for qualifying element and attribute names used in Extensible Markup Language documents by associating them with namespaces identified by URI references.

简单地说就是xmlns提供了一种方法把URI引用的名字空间定义为当前XML文件的元素和属性的默认命名空间。这里表示当前这个XML文档,也就是我们的XAML文件,它的默认的命名空间就是http://schemas.microsoft.com/winfx/2006/xaml/presentation。

然后是属性和子元素,XML对属性的表示除了可以用Property外,还可以用子元素,在XAML中也是如此,看一个简单的例子:

<Button Width="6">

   <Button.Background>White</Button.Background>

</Button>

例子当中就使用了属性和子元素两种方式来指定属性。其中的Width是直接用属性表示,Background属性是用子元素表示。在多数时候,但不是所有,你可以自由选择这两种表示方式之一。

XAML被编译为BAML(Binary Application Markup Language)文件。通常,BAML文件比XAML更小,编译后的BAML都是Pre-tokenized的,这样在运行时能更快速的加载、分析XAML等等。这些BAML文件被以资源的形式嵌入到Assembly当中。同时生成相应的代码(文件名称是**.g.cs或者**.g.vb),这些代码根据XAML元素分别生成命名的 Attribute字段。以及加载BAML的构造函数。



 

最后,关于XAML的优点,我附上一点翻译过来的条款,可能更直观:

XAML除了有标记语言、XML的优点外,还有如下一些优点:

   用XAML设计UI更简单

   XAML比其他的UI设计技术所需编码更少。

   XAML设计的UI方便转移、方便在其他环境提交。比如在Web或Windows Client。

   用XAML设计动态UI非常容易

   XAML给UI设计人员带来新的革命,现在所有的设计人员不再需要.NET开发的知识同样可以设计UI。在不远的将来,终端用户可以看到更漂亮的UI。

未完待续


本文转自赖仪灵博客园博客,原文链接:http://www.cnblogs.com/YilingLai/archive/2006/12/14/591944.html,如需转载请自行联系原作者。


目录
相关文章
|
4月前
|
XML 开发框架 .NET
|
6月前
|
IDE C# 开发工具
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
31 0
|
8月前
|
C#
WPF技术之Xaml Window
WPF Window 是一个 WPF 窗口类,它具有许多属性枚举可以控制窗口的外观和行为。
78 0
WPF技术之Xaml Window
|
8月前
|
XML 数据格式 C++
WPF-疑难问题-xaml编码导致中文字符编译无效
WPF-疑难问题-xaml编码导致中文字符编译无效
110 0
|
11月前
|
C#
4.使用代码和未经编译的XAML创建WPF应用程序
4.使用代码和未经编译的XAML创建WPF应用程序
58 0
|
数据采集 人工智能 监控
【WPF】CAD工程图纸转WPF可直接使用的xaml代码技巧
随着工业化的进一步发展,制造业、工业自动化等多领域,都可能用到上位监控系统。而WPF在上位监控系统方面,应该算是当下最流行的前端框架之一了。而随着监控体系的不断完善与更新迭代,监控画面会变得越来越复杂、多样化和全面化。
243 0
【WPF】CAD工程图纸转WPF可直接使用的xaml代码技巧
|
C#
WPF在XAML的资源中定义空字符串String.Empty
原文:WPF在XAML的资源中定义空字符串String.Empty 代码如下:                      test1     test1          
1006 0
|
C#
WPF整理-XAML访问静态属性
原文:WPF整理-XAML访问静态属性 "XAML provides an easy way to set values of properties—type converters and the extended property syntax allow for flexible setting of values.
930 0
|
前端开发 C# 程序员
WPF整理-XAML构建后台类对象
原文:WPF整理-XAML构建后台类对象 1.XAML 接触WPF的第一眼就是XAML---XAML是用来描绘界面的。其实不然! "Actually, XAML has nothing to do with UI. It's merely a declarative way of constructing objects and setting their properties.” XAML和UI一点关系也没有,它仅仅是一种以声明方式来构建对象,设置对象属性的一种方式而已,和code behind file作用差不多。
917 0
|
C#
【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的
原文:【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的 初学WPF,知道一些控件可以通过定义Style的Trigger改变要显示的样式,但是经常遇到一些明明Trigger已经触发了,但是里面Setter设置的样式,却没有效果的问题。
1216 0