XAML简介
最近一段时间主要是在学习WPF,首先想介绍下XAML
什么是XAML?
XAML是esXtensible Application Markup Language的英文缩写,相应的中文名称为可扩展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的描述性语言。(百度百科)
XAML是一种相对简单,通用的声明式编程语言,它适合构建和初始化.NET对象。
XAML作用
在Windows Presentation Foundation中XAML一般用来表示用户界面的。在Windows Workflow Foundation中程序可以使用XAML来表示与工作流相关的活动。在Windows Communication Foundation中,程序会使用XML配置文件把架构协议与应用程序协议分离开来,还可以使用XML消息和协定(Simple Object Access Protocol,SOAP)和Web服务描述语言(Web Services Description Language,WSDL)与其他程序进行通信。XAML和XML将成为所有各方使用的通用语言。
XAML命名空间
<Button xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presenttaion”
Content=”OK” Clcik=”bttton_Click”/>
XML命名空间如何映射到.NET命名空间(System.Windows.Controls)上的。该映射及其他WPF命名空间的映射是在WPF程序集中硬编码完成的。XAML文件的根对象元素必须指定至少一个XML命名空间,用于验证自己和子元素。每个命名空间下的标识都必须有唯一的前缀,例如WPF的XAML文件都会使用第二命名空间加上前缀x(xmlns:x)。它用于映射System.Windows.Markup命名空间中的类型,而且它也定义XAML编译器或解析器中的一些特殊的指令。
WPF把下面所有的.NET命令空间映射到XML命名空间
http://schemas.microsoft.com/winfx/2006/xaml/presentation
System.Windows
System.Windows.Automation
System.Windows.Controlss
System.Windows.Controls.Promitives
System.Windows.Data
System.Windows.Forms.Integration
System.Windows.Ink
System.Windows.Input
System.Windows.Media
System.Windows.Media.Animation
…
…
XAML属性元素
<Button xmlns=http://schemas.mircosoft.com/winfx/2006/xaml/presentation>
<Button.Content>
<Rectangle Height=”40” width=”40” Fill=”Black”/>
</Button.Content>
</Button>
Content属性现在被设置为一个XML元素而不是XML特性,Button.Content中的句点可用于区分对象元素与属性元素。
XAML类型转换器
<Button xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation” Content=”OK”>
<Button.Background>
<SolidColorBrush Color=”White”/>
</Button.Background>
</Button>
这里”white”怎么与System.Windows.Media.Brushes.White静态值White等价?WPF提供了许多常用数据类型转换器,如Brush,Color,FontWeight.Point等等。都是派生自TypeConverter的类。white通过WPF这些转换器自动完成值的转换。如果没有转换器可以这样写
<Button xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation” Content=”OK”>
<Button.Background>
<SolidColorBrush>
<SolidColorBrush.Color>
<Color A=”255” R=”255” G=”255” B=”255”/>
</SolidColorBrush.Color>
</SolidColorBrush>
</Button.Background>
</Button>
这里要说明一点有一个类型转换器将每个字符串”
XAML标记扩展
它像类型转换器一样可以用于扩展XAML的表达能力。它们都可以在运行时计算字符串特性的值(除了一些内建的、为提高性能而在编译时计算的标记扩展),并生成一个合适的基于字符串的对象。但与类型转换器不同的是,标记扩展是通过XAML的显式的、一致的语法调用的。只要特性值由花括号({})括起来,XAML编译器或解析器就会把它认作一个标记扩展值而不是一个普通的字符串(或其他一些需要进行类型转换的东西)。下面的按钮使用了3个不同的标记扩展类型,其中分别用到了3个不同的特性:
<Button xmlns=http://schemas.mircrosoft.com/winfx/2006/xaml/presentation
Xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
Backgraoud=”{x:Null}”
Height=”{x:Static SystemParamters.IconHeight}”
Content=”{Binding Paht=Heigth,RelativeSource={RelativeSource Self}}”/>
每个花括号中的第一个识别符是标记扩展类的名称。按照惯例,这样的类都以Extension后缀结尾,但是当你在XAML中使用它时,可以不用该后缀在这个例子中,NullExtension(我们看到的是x:Null)和StaticExtension(我们看到的是x:Static)是System.Windows.Markup命名空间的类, 因此必须使用前缀x来定位它们。Binding( 没有Extension后缀) 是在
System.Windows.Data命名空间下的,因此在默认的XML命名空间下就可以找到它。