闲话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。

未完待续

posted @ 2006-12-14 12:15 Yiling Lai 阅读(6589) 评论(15)  编辑 收藏 所属分类: WPFXAML

  回复  引用  查看    
#1楼 2006-12-14 12:46 | neuhawk      
wpf比winform漂亮多了,
可惜要普及还得等.
  回复  引用  查看    
#2楼 [楼主]2006-12-14 13:26 | Yiling Lai      
@neuhawk

呵呵,偶估计这个时间不会很长,在某些应用中WPF给用户的体验会促使企业开始关注、或者兼容VISTA
  回复  引用  查看    
#3楼 2006-12-14 14:01 | aspnetx      
这个关键还要看微软推这个技术的力度了
当然,还有我们开发人员的关注程度
  回复  引用  查看    
#4楼 2006-12-14 14:07 | neuhawk      
其实我是觉得,如果可以先过度到wpf/e,再过度到wpf是很不错的.
  回复  引用  查看    
#5楼 [楼主]2006-12-14 14:49 | Yiling Lai      
◎aspnetx

因为MS下开发人员的基数大,比例小点人也不少啊!^_^
  回复  引用  查看    
#6楼 2006-12-14 15:30 | Jeffrey Zhao      
@neuhawk
我倒觉得WPF比WPF/E要普及的快,因为WPF已经RTM了,而且和操作系统的普及有很大关系。WPF/E的话,要Linux上的浏览器支持,就不是件容易的事情……
  回复  引用  查看    
#7楼 2006-12-14 15:53 | neuhawk      
wpf最大的问题,是性能吧.没有1G内存,很多应用比较慢的,
msdn论坛也谈了不少性能的问题.
wpf/e先支持windows.,mac然后是mobile.
至于linux,还没有计划.明年估计wpf/e会released,但估计明年.net 3.0普及率很低.
  回复  引用  查看    
#8楼 [楼主]2006-12-14 16:17 | Yiling Lai      
现在VISTA好几个版本还没有正式RELEASE,也许要看正式版之后的市场响应情况!性能确实是个大问题,最近的的项目中被它搞得头大!也许是自己还没模到门路!:)
  回复  引用    
#9楼 2006-12-15 09:14 | 蛛蛛[匿名] [未注册用户]
酱紫
  回复  引用    
#10楼 2006-12-15 12:43 | *悟*道* [未注册用户]
这篇文章你是昨天中午写的,怎么今天的还没有出来啊?
在线期待中。。。
  回复  引用  查看    
#11楼 [楼主]2006-12-15 12:50 | Yiling Lai      
◎*悟*道*

今天上午一直在解决一个很郁闷的问题,解决方法我后面分享。呵呵,你可以先干其他的,过一小时再来关注应该就好了!:)

非常感谢你!
  回复  引用    
#12楼 2007-01-12 11:44 | yjgx007 [未注册用户]
还 可以,谢谢.
  回复  引用    
#13楼 2007-11-13 16:51 | azmo [未注册用户]
好,楼主继续加油!
  回复  引用    
#14楼 2008-06-16 09:46 | SANTOOK [未注册用户]
不久的将来WPF一定应用广泛,也使得.NET在很大程度上和JAVA对抗。
随着Vista的推广和XP SP3后MS的支持逐渐结束也使得 WPF 开始北接受

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-12-21 09:31 编辑过


相关链接: