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功能应该有三个:命名空间、属性和子元素。
例:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:_3DTools="clr-namespace:_3DTools;assembly=3DTools"
x:Class="CoverFlowDemo.Window1" Title="CoverFlowDemo" Height="441" Width="702" Background="black"
x:Name="Window"
xmlns:System="clr-namespace:System;assembly=System "
xmlns:selfclass="clr-namespace:DataBind "
>
<Grid>
<Button Width="600">
<Button.Background>White</Button.Background>
</Button>
<selfclass:AddData/>
</Grid>
</Window>
其中xmlns为命名空间.
在Button结点,width为属性,button.background为子元素,这两种使用方式可选择其一。
xaml的优点:
除了都具有xml的优点外还具有如下优点:
1、 用XAML设计UI更简单
2、 XAML比其他的UI设计技术所需编码更少。
3、 XAML设计的UI方便转移、方便在其他环境提交。比如在Web或Windows Client。
4、 用XAML设计动态UI非常容易
xaml文件中 xmlns:x 的作用也是指定命名空间。这里为什么是 x 而不是其他的,我们可以简单的理解为其只是 MS 的一个命名而已,没有任何特殊的意义,当然,为了避免和它的冲突,我们定义自己的命名空间的时候不能是 x。
而另一个 x:Class 的作用就是支持当前 Window 所对应的类,前面已经说过每个 XAML 元素都是一个 CLR 类型,这里的 x:Class 是 Window 的一个属性,属性的内容指出当前的窗口类是 FirstXAML 名字空间下的 Windows1 。为什么需要类,而不全部用 XAML 实现? XAML 的主要作用还是编写 UI 部分,我们仍然需要用代码对程序逻辑进行更深层次的控制。
同样地,名字空间也可以自定义,并且这个自定义会给我们带来很大的方便。我们定义如下的一个类:
namespace DataBind
{
public class AddData
{
//
}
}
如果想在 XAML 文件中使用这个 AddData 类对象,我们就可以通过自定义的名字空间引入这个类:
xmlns:local="clr-namespace: DataBind "
这里的后缀 local只 是一个标识,你可以设置为任何你喜欢的唯一标识。通过这个引入定义我们就可以在 XAML 文件中用 local 来标识 DataBind 当中的任何类。访问 AddData 类时只需要加上 local 就可以识别了: <local: AddData />
xmlns:System="clr-namespace:System;assembly=System "
例子当中引入 .NET 的 System Assembly ,通过它我们就可以直接使用 System 的任何类。利用这种类似的方式,我们可以在 XAML 中使用几乎所有的 DOTNET 框架类。
在 XAML 中 inline 嵌入程序逻辑处理代码的情况。利用 <CDATA[…]]> 关键字引入处理代码。这种情况在实际当中不太合适,我们不应该采用 UI 和逻辑混合的方式。详细的解释可以参数 Windows SDK 文档。
<![CDATA[
void Clicked(object sender, RoutedEventArgs e)
{
button1.Content = "Hello World";
}
]]></x:Code>