Wpf 简明教程

WPF - XAML Overview

在你使用 WPF 时,你会遇到的首要问题之一就是 XAML。XAML 代表可扩展应用程序标记语言。它是一种基于 XML 的简单且声明性语言。

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

  2. 它主要用于设计 GUI,但也可以用于其他目的,例如,在 Workflow Foundation 中声明工作流。

Basic Syntax

当你创建新的 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 文件包含不同种类的信息。以下表格简要解释每条信息的用途。

Information

Description

<Window

这是根的开放对象元素或容器。

x:Class = "Resources.MainWindow"

这是部分类声明,它将标记连接到背后定义的部分类代码。

xmlns = link:http://schemas.microsoft.com/win fx/2006/xaml/presentation["http://schemas.microsoft.com/win fx/2006/xaml/presentation"]

映射 WPF 客户端/框架的默认 XAML 命名空间

xmlns:x = link:http://schemas.microsoft.com/w infx/2006/xaml["http://schemas.microsoft.com/w infx/2006/xaml"]

用于 XAML 语言的 XAML 命名空间,将其映射为 x: 前缀

>

根的对象元素的结束。

<Grid> </Grid>

它是一个空网格对象的起始和结束标记。

</Window>

Closing the object element

XAML 的语法规则几乎与 XML 相似。如果您查看 XAML 文档,您就会注意它实际上是一个有效的 XML 文件,但 XML 文件并不一定是 XAML 文件。这是因为在 XML 中,属性的值必须是字符串,而在 XAML 中,它可以是不同的对象,称为属性元素语法。

  1. 对象元素的语法以一个左尖括号 (<) 和对象的名称开头,例如按钮。

  2. 定义该对象元素的一些属性和属性。

  3. 该对象元素必须以一个正斜杠 (/) 和紧随其后的右尖括号 (>) 结束。

Example of simple object with no child element

<Button/>

Example of object element with some attributes

<Button Content = "Click Me" Height = "30" Width = "60" />

Example of an alternate syntax do define properties (Property element syntax)

<Button>
   <Button.Content>Click Me</Button.Content>
   <Button.Height>30</Button.Height>
   <Button.Width>60</Button.Width>
</Button>

Example of Object with Child Element: StackPanel contains Textblock as child element

<StackPanel Orientation = "Horizontal">
   <TextBlock Text = "Hello"/>
</StackPanel>

Why XAML in WPF

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

  1. WPF doesn’t need XAML

  2. XAML doesn’t need 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 做些什么来创建、初始化和设置对象属性,相同的任务也可以使用代码完成。

  1. XAML 只是设计 UI 元素的另一种简单而简单的方法。

  2. 通过 XAML,它并不意味着您可以用来设计 UI 元素的方法是唯一的方式。您可以声明 XAML 中的对象或使用代码定义它们。

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

  4. XAML 的目的是让视觉设计师们能够直接创建用户界面元素。

  5. WPF 的目标是从标记中控制用户界面的所有视觉方面。