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 中它可以是不同的对象,这被称为属性元素语法。

  • 对象元素的语法以左尖括号 (<) 开始,后跟对象的名称,例如 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: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旨在使从标记控制用户界面的所有视觉方面成为可能。

广告