XAML全称可扩展应用程序标记语言,它是一种标记语言,看书写,有点像XML,不过与XML有差别,就是标签的名字不能随便定义,这样又像HTML了,每种标签都代表具体的含意,这点上与HTML的确很像,但XAML所表达的信息更多。另外,由于XAML的每个标签都表示了具体的含义,并且是和WPF中的控件相对应,那就意味着XAML中的标签在后台的代码中是能够访问到的(这点类似于 ASP.NET中的服务端控件,在界面上放置ASP.NET服务端控件,右对应的cs文件中是能访问到的,但不同点在于,这种对应只是在开发时的对应,最终表现给客户的是HTML标签 )。可以说XAML和后台代码,有关联,但又是分离,并且这种分离给UI设计人员与后台设计人员的提供了分离开发的物理支持。比如:

       <Button Content="Button" Name=”But1” HorizontalAlignment="Left" Height="45" Margin="101,98,0,0" VerticalAlignment="Top" Width="121"/>
前台是一个Button标签,在后能,可以用But1来设置和调用这个控件的一些成员。在上面的这,是一个对应按钮控件的标签,并且还有这个按钮附带的一些属性,像这种属性叫“属性语法”,有时属性中法是满足不了我们的应用的,比如我们要在按钮里放一个图片控件(这里要和WinForm有区别的,在WinForm中我们也可以在Button中添加PictureBox图片,但添加后,图片区域就成独立的区域了,不再具有Button的事件了),这时,<Button>标签的Content=”Button”这个属性就不好用这种“属性语法”表示了,应该改用“属性元素语法”,也就是把属性看成<Button>标签内的一个子标签。代码如下:
<Button Name="But1" HorizontalAlignment="Left" Height="76" Margin="101,98,0,0" VerticalAlignment="Top" Width="176" Click="But1_Click">
 <Button.Content>//格式为类型.属性                                                      
       <Image Height="51" Width="122" Source="t_MVP_Horizontal_BlueOnly.jpg"/>             
 </Button.Content>                             
</Button>
按钮的内容属性是一张图片。在这里,<Button.Content>标记是可以省略的。这种“属性元素法”,相同元素只能有一个,不能多次出现。
下来,来全面看一下一个Windows窗体的xaml文件吧
<Window
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       x:Class="WPFDemo.MainWindow"
       x:Name="Window"
       Title="MainWindow"
       Width="640" Height="480">
       <Grid x:Name="LayoutRoot">
       <Button Name="But1" Content="按钮" HorizontalAlignment="Left" Height="76" Margin="101,98,0,0" VerticalAlignment="Top" Width="176" Click="But1_Click">                      </Button>
       </Grid>
</Window>
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation是命名空间,这是默认的命名空间,就像WinForm中的using System一样,是所有控件的基础。另外一个xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml,是指当前窗体的命名空间,其中xmlns:x的x,像命名空间的别名,所以在下面一行代码x:Class="WPFDemo.MainWindow",才能应用x:Class,接下来两个应用x的属性,都是设置当前窗体的,一个是后台对应的代码类名,另一个当前窗体的名字(这个名字可以在代码中来调用对象成员)。
还有一点,在控件的事件,在标签中的应用和属性一样,是通过“事件名=方法名”,例如:Click="But1_Click",相当c#代码中Button.Click+=But1_Click。当然,后台代码得有 But1_Click这个方法。























本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/399249,如需转载请自行联系原作者