WPF - XAML 概述

  • 简述

    使用 WPF 时首先遇到的事情之一是 XAML。XAML 代表可扩展应用程序标记语言。它是一种基于 XML 的简单的声明性语言。
    • 在 XAML 中,很容易创建、初始化和设置具有层次关系的对象的属性。
    • 它主要用于设计 GUI,但也可以用于其他目的,例如在 Workflow Foundation 中声明工作流。
  • 基本语法

    创建新的 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" rel="nofollow" target="_blank">"http://schemas.microsoft.com/win fx/2006/xaml/presentation" 映射 WPF 客户端/框架的默认 XAML 命名空间
    xmlns:x = "http://schemas.microsoft.com/w infx/2006/xaml" rel="nofollow" target="_blank">"http://schemas.microsoft.com/w infx/2006/xaml" XAML 语言的 XAML 命名空间,将其映射到 x: 前缀
    > 根的对象元素的结尾
    <Grid>
    </Grid>
    它是空Grid对象的开始和结束标记。
    </Window> 关闭对象元素
    XAML 的语法规则与 XML 几乎相似。如果查看 XAML 文档,您会注意到它实际上是一个有效的 XML 文件,但 XML 文件不一定是 XAML 文件。这是因为在 XML 中,属性的值必须是字符串,而在 XAML 中,它可以是不同的对象,称为 Property 元素语法。
    • Object 元素的语法以左尖括号 (<) 开头,后跟对象名称,例如 Button。
    • 定义该对象元素的一些属性和属性。
    • 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> 
    
  • 为什么在 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" HorizontalMoognment = "Left"  
             Margin = "150" VerticalMoognment = "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.HorizontalMoognment = HorizontalMoognment.Left; 
             button.Margin = new Thickness(150); 
             button.VerticalMoognment = VerticalMoognment.Top; 
             button.Width = 75; 
             stackPanel.Children.Add(button);  
          } 
       } 
    } 
    
    当您编译并执行 XAML 代码或 C# 代码时,您将看到相同的输出,如下所示。
    XAML 输出
    从上面的示例中,很明显您可以在 XAML 中创建、初始化和设置对象的属性,同样的任务也可以使用代码完成。
    • XAML 只是另一种设计 UI 元素的简单方法。
    • 使用 XAML,这并不意味着您可以设计 UI 元素是唯一的方法。您可以在 XAML 中声明对象或使用代码定义它们。
    • XAML 是可选的,但尽管如此,它是 WPF 设计的核心。
    • XAML 的目标是使可视化设计人员能够直接创建用户界面元素。
    • WPF 旨在使从标记控制用户界面的所有视觉方面成为可能。