WPF - XAML 概述



使用 WPF 时,您会遇到的第一件事之一就是 XAML。XAML 代表可扩展应用程序标记语言 (Extensible Application Markup Language)。它是一种基于 XML 的简单声明性语言。

  • 在 XAML 中,创建、初始化和设置具有层次关系的对象属性非常容易。

  • 它主要用于设计 GUI,但也可以用于其他用途,例如声明工作流基础结构中的工作流。

基本语法

创建新的 WPF 项目时,默认情况下会在 MainWindow.xaml 中遇到一些 XAML 代码,如下所示。

<Window x:Class = "Resources.MainWindow" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
   Title = "MainWindow" Height = "350" Width = "525"> 
	
   <Grid> 
         
   </Grid> 
	
</Window>

上面的 XAML 文件包含不同类型的信息。下表简要解释了每种信息的用途。

信息 描述
<Window> 它是根的起始对象元素或容器。
x:Class = "Resources.MainWindow" 这是一个部分类声明,它将标记连接到后面定义的部分类代码。
xmlns = "http://schemas.microsoft.com/win fx/2006/xaml/presentation" 为 WPF 客户端/框架映射默认的 XAML 命名空间
xmlns:x = "http://schemas.microsoft.com/w infx/2006/xaml" XAML 语言的 XAML 命名空间,将其映射到 x: 前缀
> 根对象元素的结束标签

<Grid>

</Grid>

这是空网格对象的起始和结束标签。
</Window> 关闭对象元素

XAML 的语法规则与 XML 几乎相同。如果您查看 XAML 文档,您会注意到它实际上是一个有效的 XML 文件,但 XML 文件不一定是 XAML 文件。这是因为在 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> 

为什么 WPF 中要使用 XAML

XAML 不仅是 WPF 最广为人知的特性,也是最容易被误解的特性之一。如果您接触过 WPF,那么您一定听说过 XAML;但请注意以下两个关于 XAML 的鲜为人知的事实:

  • WPF 不需要 XAML
  • XAML 不需要 WPF

它们实际上是可分离的技术。为了理解这一点,让我们来看一个简单的例子,其中在 XAML 中创建了一个带有一些属性的按钮。

<Window x:Class = "WPFXAMLOverview.MainWindow" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
   Title = "MainWindow" Height = "350" Width = "604"> 
	
   <StackPanel> 
      <Button x:Name = "button" Content = "Click Me" HorizontalAlignment = "Left"  
         Margin = "150" VerticalAlignment = "Top" Width = "75" /> 
   </StackPanel> 
	
</Window> 

如果您选择不在 WPF 中使用 XAML,那么您也可以使用过程语言来实现相同的 GUI 结果。让我们来看同一个例子,但这次,我们将用 C# 创建一个按钮。

using System.Windows; 
using System.Windows.Controls;  

namespace WPFXAMLOverview { 
   /// <summary> 
      /// Interaction logic for MainWindow.xaml 
   /// </summary> 
	
   public partial class MainWindow : Window { 
	
      public MainWindow() { 
         InitializeComponent(); 
			
         // Create the StackPanel 
         StackPanel stackPanel = new StackPanel(); 
         this.Content = stackPanel; 
			
         // Create the Button 
         Button button = new Button();
         button.Content = "Click Me"; 
         button.HorizontalAlignment = HorizontalAlignment.Left; 
         button.Margin = new Thickness(150); 
         button.VerticalAlignment = VerticalAlignment.Top; 
         button.Width = 75; 
         stackPanel.Children.Add(button);  
      } 
   } 
} 

编译并执行 XAML 代码或 C# 代码后,您将看到如下所示的相同输出。

XAML Output

从上面的例子可以看出,您在 XAML 中可以用来创建、初始化和设置对象属性的操作,也可以使用代码完成。

  • XAML 只是一种设计 UI 元素的简单易用的方法。

  • 使用 XAML,并不意味着设计 UI 元素的方法是唯一的。您可以声明 XAML 中的对象,也可以使用代码定义它们。

  • XAML 是可选的,但尽管如此,它仍然是 WPF 设计的核心。

  • XAML 的目标是使视觉设计师能够直接创建用户界面元素。

  • WPF 旨在使从标记控制用户界面的所有视觉方面成为可能。

广告