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 文件提到了不同类型的信息;下表简要描述了所有这些内容。

信息 描述
<用户控制 提供用于定义新控件的基类,该新控件封装现有控件并提供其自己的逻辑。
x:Class = "FirstExample.MainPage" 它是一个分部类声明,它将标记连接到其中定义的后面的分部类代码。
xmlns =“http://schemas.microsoft.com/winfx/2006/xaml/presentation” 映射 Silverlight 客户端/框架的默认 XAML 命名空间。
xmlns:x = "http://schemas.microsoft.com/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 的标记兼容模式。
> 根对象元素的结尾。
<网格></网格> 这些是空网格对象的开始和结束标签。
</用户控制> 关闭对象元素。

XAML 的语法规则几乎与 XML 的语法规则类似。如果您查看 XAML 文档,您会发现它实际上是一个有效的 XML 文件。反之亦然则不然,因为在 XML 中,属性的值必须是字符串,而在 XAML 中,它可以是不同的对象,称为 Property 元素语法。

  • Object 元素的语法以左尖括号(<) 开头,后跟对象的名称,例如Button。

  • 该对象元素的属性和属性已定义。

  • 对象元素必须以正斜杠 (/) 结束,紧接着是直尖括号 (>)。

下面显示了没有子元素的简单对象的示例。

<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 代码中,定义了TextBlockButton 。默认情况下,当应用程序运行时,它将显示文本“ 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 :前缀表示该名称不是普通属性。

  • 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 的目标是使通过标记控制用户界面的所有视觉方面成为可能。