WPF教程

XAML语法术语html教程

时间:2013-6-20 1:23:24  作者:WPF之家  来源:http://www.wpf123.com  查看:189  评论:0
内容摘要:本主题定义用来描述可扩展应用程序标记语言 (XAML) 语法的各个元素的术语。这些术语将在本软件开发工具包 (SDK) 的其余部分中经常用到。本主题扩展了 XAML 概述中所介绍的基本术语。XAML 语法术语的起源 此处定义的 XAML 语法术语在 XAML 语言规范中...

本主题定义用来描述可扩展应用程序标记语言 (XAML) 语法的各个元素的术语。这些术语将在本软件开发工具包 (SDK) 的其余部分中经常用到。本主题扩展了 XAML 概述中所介绍的基本术语。

XAML 语法术语的起源 
此处定义的 XAML 语法术语在 XAML 语言规范中也有定义或引用。XAML 是一种基于 XML 且遵循 XML 结构规则的语言。其中的术语共享自或基于描述 XML 语言或 XML 文档对象模型 (DOM) 时的常用术语。

 对象元素语法 
对象元素语法是一种 XAML 标记语法,它通过声明 XML 元素来实例化公共语言运行库 (CLR) 类或结构。此语法与其他标记语言(例如 HTML)的元素语法相似。对象元素语法以左尖括号 (<) 开头,其后紧跟正进行实例化的类或结构的类型名称。类型名称后面可以有零个或多个空格,对于对象元素还可以声明零个或多个属性,并用一个或多个空格来分隔每个“属性名="值"”对。最后,必须存在下列一种情况:

元素和标记必须用正斜杠 (/) 和紧跟的右尖括号 (>) 结尾。

开始标记必须以右尖括号 (>) 结尾。其他对象元素、属性元素或内部文本可以跟在开始标记后面。对象元素还必须存在等效的结束标记,并与其他开始标记/结束标记对形成正确的嵌套和平衡。

例如,下面的示例是一个对象元素语法,该语法实例化 Button 类的一个新实例,而且还指定了一个 Name 属性及其值:

XAML语法术语

下面的示例是一个还包括可扩展应用程序标记语言 (XAML) 内容属性语法的对象元素语法。其中包含的内部文本将用来设置 TextBox 可扩展应用程序标记语言 (XAML) 内容属性 Text。

XAML语法术语 

属性语法 
属性语法是一种 XAML 标记语法,该语法通过针对元素声明属性 (Attribute) 来设置属性 (Property) 值或者命名事件的事件处理程序。元素总是通过对象元素语法来声明。属性名必须与属性或事件的 CLR 成员名称相匹配。属性名后面是赋值运算符 (=)。属性值必须是一个用双引号 (") 引起来的字符串。

为了能够通过属性语法进行设置,属性必须是公共的、可读写的,而且必须具有一个可以由 XAML 处理器实例化或引用的属性值类型。对于事件来说,事件必须是公共的而且必须具有一个公共委托。属性或事件必须是由包含对象元素实例化的类或结构的成员。

属性值由下面的操作之一,按照如下处理顺序进行填充:

如果 XAML 处理器遇到一个大括号,或者遇到一个从 MarkupExtension 派生的对象元素,则将首先计算所引用的标记扩展(而不是将该扩展作为字符串来处理),而且将使用由标记扩展返回的对象。在许多情况下,由标记扩展返回的对象将是对现有对象的引用,或者是一个将计算推迟到运行时的表达式,而不是一个新对象。

如果该属性 (Property) 是用指定的 TypeConverter 声明的,或者该属性 (Property) 的值类型是用属性 (Attribute) 化 TypeConverter 声明的,则该属性 (Attribute) 的字符串值将作为转换输入提交到类型转换器,该转换器将返回一个新的对象实例。

如果没有 TypeConverter,则将尝试直接转换为属性类型。最后一个级别是直接在基元类型之间转换,或者在枚举中检查名称(这将返回匹配的值)。

例如,在使用上面所显示的标记时,可以使用下面的属性 (Attribute) 语法示例为 Name 属性 (Property) 赋予字符串值:

XAML语法术语

Name 属性是 Button 类的成员表的成员。Button 是用来定义 Name 的 FrameworkElement 类的派生类。

属性值的处理
包含在左引号和右引号之间的字符串值是由 XAML 处理器处理的。对于属性来说,默认处理行为是由基础 CLR 属性的类型确定的。如果该属性 (Property) 是基元类型,则会基于字符串到相关基元类型的隐式转换来赋予属性 (Attribute) 值。如果该属性是一个枚举,则字符串会被视为由该枚举定义的名称,而且将从枚举中返回匹配的值。如果该属性 (Property) 既不是基元类型又不是枚举,则属性 (Attribute) 值必须由针对该属性 (Property) 本身或者目标类型声明的类型转换器来处理。类型转换器必须提供一个能够接受字符串的转换机制,该转换机制必须生成基础 CLR 属性类型的实例。还可以通过标记扩展来推迟转换步骤。

枚举属性值
XAML 中的枚举值由 Enum 结构的本机方法在内部处理。

对于无标志的枚举值,本机行为是处理属性值的字符串并将它解析为某个枚举值。您不必像在代码中那样指定格式为枚举.值 的枚举,而是仅指定值,枚举 将从所设置属性的类型推断。如果您指定格式为枚举.值 的属性,它将无法正确解析。

对于按标志枚举,该行为基于 Enum..::.Parse 方法。您可以通过用逗号分隔每个值来为按标志枚举指定多个值。但是,您不能合并不按标志的枚举值。例如,不能试图使用逗号语法来创建作用于无标志枚举多个条件的 Trigger:

XAML语法术语  

WPF 中,能够支持 XAML 中可设置属性的按标志枚举极为罕见。但是,StyleSimulations 就是这样的一个枚举。例如,可以使用逗号分隔的按标志属性语法来修改在 Glyphs 类的“Remarks”(备注)部分中提供的示例;StyleSimulations = "BoldSimulation" 可能会变成 StyleSimulations = "BoldSimulation,ItalicSimulation"。KeyBinding..::.Modifiers 是另一个属性,在该属性中可以指定多个枚举值。但是,此属性是一个特例,因为 ModifierKeys 枚举支持其自身的类型转换器。修饰符的类型转换器使用加号 (+) 而不是逗号 (,) 作为分隔符,因此在标记中支持用更传统的语法来表示组合键(如“Ctrl+Alt”)。

属性引用和事件成员名称引用
在指定属性 (Attribute) 时,可以引用您已经为包含对象元素实例化的 CLR 类型的成员表中存在的任何属性 (Property) 或事件。

或者,可以独立于包含对象元素来引用附加属性或附加事件。

对于可通过默认命名空间访问的任何对象中的任何事件,还可以通过使用类型名.事件 部分限定名来命名。此语法支持为路由事件附加处理程序,在路由事件中,处理程序旨在处理子元素中的事件路由,但是父元素在其成员表中并不拥有该事件。此语法与附加事件语法相似,但此处的事件不是真正的附加事件。相反,您引用的是具有限定名称的事件。

属性 (Property) 名有时作为属性 (Attribute) 值提供,而不是作为属性 (Attribute) 名提供,属性 (Property) 名还可以包括限定符,例如以所有者类型.依赖项属性名称 格式指定的属性。在 XAML 中编写样式或模板时,此情况较为常见。以属性 (Attribute) 值形式提供的属性 (Property) 名具有不同的处理规则,这些规则由所设置的属性 (Property) 类型以及某些上下文因素(如样式或模板是否具有目标类型)来控制。

当属性 (Attribute) 值描述属性 (Property) 之间的关系时,也可以使用属性 (Property) 名。此功能可用于数据绑定和演示图板目标,而且由 PropertyPath 类及其类型转换器启用。


标签:XAML 语法 术语 

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。本文出自“wpf之家”,请务必保留此出处:http://www.wpf123.com

相关评论
Copyright © 2009-2014 WPF之家(http://www.wpf123.com/) All rights reserved
 Powered by WPF之家
鄂ICP备13006396号