Silverlight - XAML 概述
使用 Silverlight 时首先遇到的事情之一就是 XAML。 XAML 代表可扩展应用程序标记语言。 它是一种基于 XML 的简单声明性语言。
在XAML中,创建、初始化和设置具有层次关系的对象的属性是非常容易的。
主要用于GUI设计。
它也可用于其他目的,例如,在工作流基础中声明工作流。
基本语法
当您创建新的 Silverlight 项目时,默认情况下您将在 MainPage.xaml 中看到一些 XAML 代码,如下所示。
<UserControl x:Class = "FirstExample.MainPage" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable = "d" d:DesignHeight = "300" d:DesignWidth = "400"> <Grid x:Name = "LayoutRoot" Background = "White"> </Grid> </UserControl>
你可以看到上面给出的XAML文件提到了不同类型的信息; 所有这些都在下表中进行了简要描述。
信息 | 描述 |
---|---|
<UserControl | 提供用于定义新控件的基类,该控件封装现有控件并提供自己的逻辑。 |
x:Class = "FirstExample.MainPage" | 它是一个分部类声明,它将标记连接到其中定义的后面的分部类代码。 |
xmlns = "http://schemas.microsoft.com /winfx/2006/xaml/presentation" | 映射 Silverlight 客户端/框架的默认 XAML 命名空间。 |
xmlns:x = "http://schemas.microsoft.c om/winfx/2006/xaml" | XAML 语言的 XAML 命名空间,将其映射到 x: 前缀。 |
xmlns:d = "http://schemas.microsoft.com /expression/blend/2008" | XAML 命名空间旨在提供设计器支持,特别是 Microsoft Visual Studio 和 Microsoft Expression Blend 的 XAML 设计界面中的设计器支持。 |
xmlns:mc = "http://schemas.openxmlforma ts.org/markup-compatibility/2006" | 指示并支持用于读取 XAML 的标记兼容模式。 |
> | 根对象元素结束。 |
<Grid></Grid> | 这些是空网格对象的开始和结束标记。 |
</UserControl> | 关闭对象元素。 |
XAML 的语法规则几乎与 XML 的语法规则相似。 如果您查看 XAML 文档,您会发现它实际上是一个有效的 XML 文件。 反之亦然则不然,因为在 XML 中,属性的值必须是字符串,而在 XAML 中,它可以是不同的对象,即属性元素语法。
Object 元素的语法以左尖括号 (<) 开头,后跟对象的名称,例如 按钮。
该对象元素的属性和属性已定义。
Object 元素必须以正斜杠 (/) 结束,后跟右尖括号 (>)。
下面显示了没有子元素的简单对象的示例。
<Button/>
具有某些属性的对象元素示例 −
<Button Content = "Click Me" Height = "30" Width = "60"/>
定义属性的替代语法示例(属性元素语法) −
<Button> <Button.Content>Click Me</Button.Content> <Button.Height>30</Button.Height> <Button.Width>60</Button.Width> </Button>
具有子元素的对象示例:StackPanel 包含 Textblock 作为子元素。
<StackPanel Orientation = "Horizontal"> <TextBlock Text = "Hello"/> </StackPanel/>
为什么要在 Silverlight 中使用 XAML
XAML 最初并不是为 Silverlight 发明的。 它来自 WPF(Windows Presentation Foundation)。 Silverlight 通常被描述为 WPF 的子集。 严格来说这并不正确,因为 Silverlight 可以做一些 WPF 不能做的事情。 即使功能重叠,两者在细节上也略有不同。
更准确的说法是,WPF 和 Silverlight 在很多方面都非常相似。 尽管存在差异,但查看 Silverlight 从 WPF 借用的 XAML 功能仍然可以提供丰富的信息。 例如,Silverlight 提供位图和可缩放形状的图形基元。
它还提供用于渲染视频和音频的元素。
它具有简单的格式化文本支持,并且您可以为任何元素设置动画。 如果您了解 WPF,您将会熟悉此功能集。
重要的一点是,您不能采用 WPF XAML 并在 Silverlight 中使用它。
虽然有相似之处,但您也会发现许多细微的差异。
XAML 和隐藏代码
XAML 定义用户界面的外观和结构。 但是,如果您希望应用程序在用户与其交互时执行任何有用的操作,则需要一些代码。
每个 XAML 文件通常都与一个源代码文件关联,我们将其称为隐藏代码。 各种 Microsoft 框架都使用此术语。
背后的代码通常需要使用 XAML 中定义的元素,以检索有关用户输入的信息,或向用户显示信息。
在下面给出的 XAML 代码中,定义了 TextBlock 和 Button。 默认情况下,当应用程序运行时,它将在网页上显示文本"Hello World!"和一个按钮。
<UserControl x:Class = "FirstExample.MainPage" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable = "d" d:DesignHeight = "300" d:DesignWidth = "400"> <Grid x:Name = "LayoutRoot" Background = "White"> <StackPanel> <TextBlock x:Name = "TextMessage" Text = "Hello World!" Margin = "5"> </TextBlock> <Button x:Name = "ClickMe" Click = "ClickMe_Click" Content = "Click Me!" Margin = "5"> </Button> </StackPanel> </Grid> </UserControl>
后面的代码可以访问使用 x:Name 指令命名的任何元素。
命名元素可通过后台代码中的字段使用,从而允许代码以通常的方式访问这些对象及其成员。
x:Prefix 表示该名称不是普通属性。
x:Name 是向 XAML 编译器发出的特殊信号,表明我们希望在后面的代码中访问此对象。
下面给出的是更新 TextBlock 文本的按钮单击事件实现。
using System.Windows; using System.Windows.Controls; namespace FirstExample { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void ClickMe_Click(object sender, RoutedEventArgs e) { TextMessage.Text = "Congratulations! you have created your first Silverlight Applicatoin"; } } }
XAML 并不是设计 UI 元素的唯一方法。 您可以在 XAML 中声明对象,也可以在代码中声明/编写。
XAML 是可选的,但尽管如此,它仍然是 Silverlight 设计的核心。
XAML 编码的目标是使视觉设计人员能够直接创建用户界面元素。 因此,Silverlight 旨在使通过标记控制用户界面的所有视觉方面成为可能。