WPF入门之XAML初窥2010-07-18 cnblogs zlgcool AllanOverview: 很早就想写些文章来总结一下自己学习一些新知识的经历,一来可以在日后查找,其到一个索引的作用;二来可以和爱好技术的朋友们共同交流,鉴于工作缘故始终无法抽身写。最近源于对WPF和Silverlight的浓厚兴趣和项目中要用的缘故,特此和大家分享一些学习WPF/Silverlight的过程。这个系列会简单回顾一些WPF中基本的概念和入门知识,以此来构成创建WPF程序(甚至于Silverlight程序,其在很大程度上有些依赖于WPF)的基础。本人不曾写过很多blog,再者WPF本身对程序员的一些创新思维挑战对我来说都是很大的难点,不周之处且请各位大侠指点。不胜感谢。Topic: 本文为此系列的第一张,将大致介绍一下在.NET3.0中正式启用的XAML的相关概念以及其在WPF中的应用。总所周知,随着.NET Framework 3.0的到来,其包含的几个组件Windows Workflow Fundation, Windows Communication Foundation, Windows Cardspace以及我们要讲的Windows Presentation Foundation逐渐吸引了大家很多的目光,作为.NET Framework的一部分,其提供了很多优越性而使得我们的编程模式以至变成思路都发生了很多的改观。而在其最主要的几个优点上,其引入的"声明式描述"带给我们焕然一新的感觉,而这就是XAML的主要功劳。XAML作为可以在很大程度上替代一些coding语句的声明式XML,.NET Framework提供了对XAML的编译支持,而这无非又让我们看到了和HTML/XML很相似的风格,这种看似很随意,很灵活的风格给我们带来了新的编程体验。WF, WPF都采用XAML来进行部分过程的描述。1. 什么是XAML?XAML是一种相对简单、通用的声明式变成语言,它适合于构建和初始化.NET对象。它由一些规则和关键字构成,但是它自己没有任何有意义的元素。在没有WPF/WF框架的基础上讨论XAML就象在没有.NET Framework的基础上讨论C#一样是没有任何意义的,因为它本身并不能提供任何有意义的元素,需要由WPF/WF框架或者说.NET XAML编译器和WPF应用框架来承载、理解XAML的表达意义。由于XAML的通用性,实际上你可以把它应用于任何.NET技术。然而,是否在使用WPF时使用XAML是可选的,每一个XAML能做的事情完全可以由任何一种你喜欢的.NET语言来实现,但是反过来是不行的。在后边的解释中你会看到,实际上针对XAML的解释,XAML编译器是把XAML语句与.NET对象/类型联系在一起的,将XAML纳入和.NET类型相同的模型中控制是他们为什么能够互相兼容的重要原因。例如如下的XAML片段和.NET C#语句所表达的结果是相同的:XAML: <Button xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation Content="OK" />C#: System.Windows.Controls.Button btnOk = new System.Windows.Controls.Button();b.Content = "OK";2. XAML元素及特性2.1 XAML命名空间XAML文件的跟对象元素必须至少有一个XML命名空间,用于验证自己和其子元素。你可以在根元素或子元素上声明额外的XML命名空间来标识你的自定义元素,但每个命名空间下的标识符都必须有一个唯一的前缀。我们把http://schemas.microsoft.com/winfx/2006/xaml/presentation作为默认(主要)的命名空间,我们在使用大多数控件时都使用此主命名空间,因为WPF通过硬编码的方式将此命名空间与.NET的命名空间进行了映射。而对于次命名空间,我们通常需要添加前缀来表示其命名空间在以下范围内被引用,中就像C#中的using System;一样,声明了一个可以引用的命名空间。以下代码片段演示了如何使用主命名空间和次命名空间:<UserControl x:Class="MediaPlayer.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="450" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock FontSize="12" FontWeight="Bold" HorizontalAlignment="Center">Vedio Player</TextBlock>
</Grid>
</UserControl>
2.2 属性元素(Property Element)属性元素本质上是为了增加在元素中包含子元素的一种方式。它是XAML提供的用来替代更加详细的语法来设置属性值的方法。例如:<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" >
<Button.Content>
</Rectangle Height="40" Width="40" Fill="Black" />
</Button.Content>
</Button>
Content属性现在被设置为一个XML元素而不是XML属性,Button.Content中的句点用来区分对象元素与属性元素。属性元素总会以“类型名.属性名”的形式出现并包含在“类型名”对象元素中。说白了,属性元素是为了扩展某类型的属性而存在的。