XAML概述

一:语法概述

1:XAML 对象元素

1 <StackPanel>
2   <Button Content="Click Me"/>
3 </StackPanel>

此示例指定了两个对象元素:<StackPanel>(含有内容,后面有一个结束标记)和 <Button .../>(自结束形式,包含几个特性)

指定对象元素标记时会创建一条 XAML 处理指令来创建一个新实例。 每个实例都是在分析和加载 XAML 时通过调用基础类型的默认构造函数来创建的。

2:CLR的属性表示

  ①特性语法

<Button Background="Blue" Foreground="Red" Content="This is a button"/>

  ②属性元素语法

 1 <Button>
 2   <Button.Background>
 3     <SolidColorBrush Color="Blue"/>
 4   </Button.Background>
 5   <Button.Foreground>
 6     <SolidColorBrush Color="Red"/>
 7   </Button.Foreground>
 8   <Button.Content>
 9     This is a button
10   </Button.Content>
11 </Button>

3:集合语法

<LinearGradientBrush>
  <LinearGradientBrush.GradientStops>
    <!-- no explicit new GradientStopCollection, parser knows how to find or create -->
    <GradientStop Offset="0.0" Color="Red" />
    <GradientStop Offset="1.0" Color="Blue" />
  </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

4:XAML 内容属性

XAML 指定了一个语言功能,通过该功能,一个类可以指定它的一个且仅一个属性为 XAML 内容属性。 该对象元素的子元素用于设置该内容属性的值。 换言之,仅对内容属性而言,您可以在 XAML 标记中设置该属性时省略属性元素,并在标记中生成更直观的父级/子级形式。

<Border>
  <TextBox Width="300"/>
</Border>
<!--explicit equivalent-->
<Border>
  <Border.Child>
    <TextBox Width="300"/>
  </Border.Child>
</Border>

5:文本内容

有少量 XAML 元素可直接将文本作为其内容来处理。 若要实现此功能,必须满足以下条件之一:

    • 类必须声明一个内容属性,并且该内容属性必须是可赋值给字符串的类型(该类型可以是 Object)。 例如,任何 ContentControl 都将 Content 用作其内容属性,并且其类型为 Object,这样就支持实际的 ContentControl(例如,Button)上的如下用法:<Button>Hello</Button>。
    • 类型必须声明一个类型转换器,该类型转换器将文本内容用作其初始化文本。 例如,<Brush>Blue</Brush>。 这种情况实际上并不常见。
    • 类型必须为已知的 XAML 语言基元。

6:内容属性和集合语法组合

<StackPanel>
  <Button>First Button</Button>
  <Button>Second Button</Button>
</StackPanel>

此例中,每个 Button 都是 StackPanel 的一个子元素。 这是一个简单直观的标记,其中出于两个不同的原因省略了两个标记。

  • 省略的 StackPanel.Children 属性元素: StackPanel 从 Panel 派生。 Panel 将 Panel.Children 定义为其 XAML 内容属性。
  • 省略的 UIElementCollection 对象元素: Panel.Children 属性采用类型 UIElementCollection,该类型实现 IList。 根据处理集合(例如 IList)的 XAML 规则,集合的元素标记可以省略。 (在这种情况下,UIElementCollection 实际无法实例化,因为它没有公开默认构造函数,这就是 UIElementCollection 对象元素以注释形式出现的原因。)
1 <StackPanel>
2   <StackPanel.Children>
3     <!--<UIElementCollection>-->
4     <Button>First Button</Button>
5     <Button>Second Button</Button>
6     <!--</UIElementCollection>-->
7   </StackPanel.Children>
8 </StackPanel>

7:事件

  特性语法

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>

二:XAML 中的大小写和空白

对象元素、属性元素和特性名称均必须使用区分大小写的形式指定

值并不总是区分大小写。 值是否区分大小写将取决于与采用该值的属性关联的类型转换器行为,或取决于属性值类型。 例如,采用 Boolean 类型的属性可以采用 true 或 True 作为等效值,但只是因为将字符串转换为 Boolean 的本机 WPF XAML 分析器类型转换已经允许将这些值作为等效值。

XAML 将空格、换行符和制表符转化为空格,如果它们出现在一个连续字符串的任一端,则保留一个空格。

三:标记扩展

标记扩展是一个 XAML 语言概念。 当用于提供特性语法的值时,大括号({ 和 })表示标记扩展用法。 此用法指示 XAML 处理系统不要像通常那样将特性值视为一个文本字符串或者可转换为字符串的值。

 1 <Page.Resources>
 2   <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
 3   <Style TargetType="Border" x:Key="PageBackground">
 4     <Setter Property="Background" Value="Blue"/>
 5   </Style>
 6
 7
 8 ...
 9
10
11 </Page.Resources>
12 <StackPanel>
13   <Border Style="{StaticResource PageBackground}">
14
15
16 ...
17
18
19   </Border>
20 </StackPanel>

四:类型转换器

<Button Margin="10,20,10,30" Content="Click me"/>

上面的特性语法示例与下面更为详细的语法示例等效,但在下面的示例中,Margin 改为通过包含 Thickness 对象元素的属性元素语法进行设置。 而且设置 Thickness 的四个关键属性作为新实例的特性:

<Button Content="Click me">
  <Button.Margin>
    <Thickness Left="10" Top="20" Right="10" Bottom="30"/>
  </Button.Margin>
</Button>

五:XAML 根元素和 XAML 命名空间

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

...

</Page>

  x: 前缀

  • x:Key:为 ResourceDictionary(或其他框架中的类似字典概念)中的每个资源设置唯一的键。 在典型的 WPF 应用程序标记中的所有 x: 用法中,x:Key 将可能占到 90%。
  • x:Class:向为 XAML 页提供代码隐藏的类指定 CLR 命名空间和类名。 必须具有这样一个类才能支持每个 WPF 编程模型的代码隐藏,而正是因此,即使没有资源,也几乎总是能看到映射的 x:。
  • x:Name:处理对象元素后,为运行时代码中存在的实例指定运行时对象名称。 通常,您将为 x:Name 经常使用 WPF 定义的等效属性。 此类属性特定映射到 CLR 后备属性,因此更便于进行应用程序编程,在应用程序编程中,您经常使用运行时代码从初始化的 XAML 中查找命名元素。 最常见的此类属性是 FrameworkElement.Name。 在特定类型中不支持等效的 WPF 框架级 Name 属性时,仍然可以使用 x:Name。 某些动画方案中会发生这种情况。
  • x:Static:启用一个返回静态值的引用,该静态值只能是一个 XAML 兼容属性。
  • x:Type:根据类型名称构造一个 Type 引用。 它用于指定采用 Type(例如 Style.TargetType)的特性,但属性经常具有本机的字符串到 Type 的转换功能,因此使用 x:Type 标记扩展用法是可选的。

六:XAML 中的自定义前缀和自定义类型

下面是一个说明自定义前缀如何在 XAML 标记中工作的基本示例。 前缀 custom 在根元素标记中定义,并映射为随应用程序一同打包并可用于该应用程序的一个特定程序集。 此程序集包含 NumericUpDown 类型,实现该类型的目的是在支持常规 XAML 用法之外,还可以使用允许在 WPF XAML 内容模型的此特定点执行插入的类继承。 通过使用该前缀,此 NumericUpDown 控件的一个实例声明为对象元素,以便 XAML 分析器可找到包含该类型的 XAML 命名空间,从而找到包含该类型定义的后备程序集的位置。

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:custom="clr-namespace:NumericUpDownCustomControl;assembly=CustomLibrary"
    >
  <StackPanel Name="LayoutRoot">
    <custom:NumericUpDown Name="numericCtrl1" Width="100" Height="60"/>
...
  </StackPanel>
</Page>

七:事件和 XAML 代码隐藏

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>
 1 namespace ExampleNamespace
 2 {
 3   public partial class ExamplePage
 4   {
 5     void Button_Click(object sender, RoutedEventArgs e)
 6     {
 7       Button b = e.Source as Button;
 8       b.Foreground = Brushes.Red;
 9     }
10   }
11 }

八:XAML 命名元素

<StackPanel Name="buttonContainer">

...

  <Button Click="RemoveThis">Click to remove this button</Button>
</StackPanel>
void RemoveThis(object sender, RoutedEventArgs e)
{
    FrameworkElement fe = e.Source as FrameworkElement;
    if (buttonContainer.Children.Contains(fe))
    {
        buttonContainer.Children.Remove(fe);
    }
}

九:附加属性和附加事件

<DockPanel>
  <Button DockPanel.Dock="Left" Width="100" Height="20">I am on the left</Button>
  <Button DockPanel.Dock="Right" Width="100" Height="20">I am on the right</Button>
</DockPanel>
时间: 2024-08-09 07:13:57

XAML概述的相关文章

XAML 概述

我们将向 Windows 运行时应用开发人员介绍 XAML 语言和 XAML 概念,并介绍在使用 XAML 创建 Windows 运行时应用时,在 XAML 中声明对象和设置属性的不同方式. 什么是 XAML? Extensible Application Markup Language (Extensible Application Markup Language, XAML) 是一种声明性语言.具体来讲,XAML 可初始化对象和设置对象的属性,使用一种可显示多个对象间分层关系的语言结构,还使

ResourceDictionary 和 XAML 资源引用

XAML 定义应用的 UI,并且 XAML 也可以定义 XAML 中的资源.资源通常是对你希望多次使用的某些对象的定义.你要为 XAML 资源定义一个键,以供将来引用,该键的作用类似于资源的名称.你可以在整个应用中或从应用中的任意 XAML 页面引用资源.Windows 运行时 XAML 具有一个 ResourceDictionary 元素,你可以在其中定义你的资源.然后可使用 StaticResource 标记扩展或 ThemeResource 标记扩展来引用你的资源. 你最希望声明为 XAM

基本 XAML 语法指南

我们介绍了 XAML 语法规则,以及用于描述 XAML 语法中存在的限制或选项的术语.当出现以下情况时你会发现本主题很有用:不熟悉 XAML 语言的使用,希望加强对术语或某些语法部分的理解,或者对 XAML 语言的工作原理感兴趣,因而希望了解更多背景知识. XAML 是 XML XAML 的基本语法基于 XML,且定义有效的 XAML 必须也是有效的 XML.但是,XAML 也有自己的用来扩展 XAML 的语法概念.给定的 XML 实体可能在纯 XML 中有效,但该语法在 XAML 中可能具有不

第一个应用

---恢复内容开始--- (由于作者懒,就先学习C#版的吧,嘿嘿) C#版"hello world" 一.创建新项目 启动 Visual Studio 2015. 在文件菜单中,依次选择新建 > 项目...打开"新建项目对话框. 在左侧的模板列表中,依次打开已安装> 模板> Visual C#> Windows,然后选择通用查看 UWP 项目模板列表. (如果未看到任何通用模板,可能未安装 Visual Studio 2015,也可能缺少用于创建 UW

布局控件Grid

XAML概述 Silverlight的控件绘制是由XAML语言进行支持的.什么是XAML语言? 简单的说,XAML(Extensible Application Markup Language )是一款基于XML的描述性语言,中文也叫做可扩展应用程序标记语言. 该语言是由微软开发创建,主要用于构建WPF和Silverlight应用程序用户界面.XAML是Silverlight用户界面设计的基础,使用XAML可以定义Silverlight对象以及属性,相对于后台语言定义控件来说,XAML提供了非常

Expression Blend实例中文教程(3) - 布局控件快速入门Grid

上一篇对Blend 3开发界面进行了快速入门介绍,本篇将基于Blend 3介绍Silverlight控件.对于微软开发工具熟悉的朋友,相信您很快就熟悉Blend的开发界面和控件. XAML概述 Silverlight的控件绘制是由XAML语言进行支持的.什么是XAML语言? 简单的说,XAML(Extensible Application Markup Language )是一款基于XML的描述性语言,中文也叫做可扩展应用程序标记语言. 该语言是由微软开发创建,主要用于构建WPF和Silverl

Xaml语法概述及属性介绍

Xaml语法概述1.命名空间    xmal每个元素都对应着一个类,但是在xmal中,只提供类名是不够的,需要知道该类实在.net的哪个命名空间下面.Xaml解析器才能够正确的解析. 1 <Page 2 x:Class="App1.MainPage" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microso

WPF中的导航框架(一)——概述

有的时候,我们需要一个支持页面跳转的UI,例如文件浏览器,开始向导等.对于这样的界面,简单的可以使用ContentControl + ContentTemplateSelector的方式来实现,但是有的时候我们会需要一些更加高级的跳转功能,如前进,回退等.这个时候,用这个方式就稍微有点力不从心了,此时,我们可以使用WPF的导航框架帮助我们快速实现这一功能. WPF 的Page框架主要包括两个部分,容器和页面, 下面就以一个简单的例子来介绍WPF的Page框架,首先我们创建第一个页面: <Page

WPF学习------XAML 语法详述

XAML 语言规范 XAML 语言规范中也定义或引用了此处定义的 XAML 语法术语. XAML 是一种基于 XML 并遵循或扩展 XML 结构规则的语言. 其中某些术语共享自或基于描述 XML 语言或 XML 文档对象模型时常用的术语. 有关 XAML 语言规范的更多信息,请从 Microsoft 下载中心下载 [MS-XAML]. XAML 和 CLR XAML 是一种标记语言. 顾名思义,公共语言运行时 (CLR) 实现了运行时执行. XAML 本身并非 CLR 运行时直接使用的一种公共语