代码改变世界

WPF Summary:XAML语法

2011-03-23 16:51  海蓓娜楽  阅读(417)  评论(0编辑  收藏  举报
XAML对象元素

对象元素通常声明类型的实例。 该类型在为以 XAML 为语言的技术提供后备类型的程序集中定义。

对象元素语法始终以左尖括号 (<) 开头, 后跟要创建实例的类型的名称。(该名称可能包含前缀,前缀的概念会在后面解释。)在此之后,您可以选择声明该对象元素的特性。 要完成对象元素标记,请以右尖括号 (>) 结尾。 您也可以使用不含任何内容的自结束形式,方法是用一个正斜杠后接一个右尖括号 (/>) 来完成标记。

示例

XAML特性语法(属性)

对象的属性通常可表示为对象元素的特性。 特性语法命名在特性语法中设置的属性,后跟赋值运算符 (=)。 特性的值始终以包含在引号中的字符串的形式进行指定。 特性语法是最简单有效的属性设置语法,并且对于曾使用过标记语言的开发人员而言在使用中是最直观的语法。

示例

XAML特性语法(事件)

特性语法还可用于事件成员,而不仅限于属性成员。 在这种情况下,特性的名称为事件的名称。 在 XAML 事件的 WPF 实现中,特性的值是实现该事件的委托的处理程序的名称。

示例

XAML属性元素语法

对于对象元素的某些属性,特性语法是不可能实现的,因为无法在特性语法的引号和字符串限制内充分地表达提供属性值所必需的对象或信息。对于这些情况,可以使用另一个语法,即属性元素语法。属性元素开始标记的语法为 <类型名称.属性名称>。 通常,该标记的内容是类型的一个对象元素,属性会将该元素作为其值。指定内容之后,必须用一个结束标记结束属性元素。 结束标记的语法为 </类型名称.属性名称>。 如果可以使用特性语法,那么使用特性语法通常更为方便,且能够实现更为精简的标记,但这通常只是一个风格的问题,而不属于技术限制。

示例

XAML集合语法

XAML 语言包含一些优化,可以生成可读性更好的标记。 其中的一项优化是:如果某个特定属性采用集合类型,则您在标记中声明为该属性的值内的子元素的项将成为集合的一部分。 在这种情况下,子对象元素的集合是设置为集合属性的值。

示例

XAML内容属性语法

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

示例

作为 XAML 语言的规则,XAML 内容属性的值必须完全在该对象元素的其他任何属性元素之前或之后指定。

示例

XAML文本内容语法

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

Ø 类必须声明一个内容属性,并且该内容属性必须是可赋值给字符串的类型(该类型可以是 Object)。 例如,任何 ContentControl 都将 Content 用作其内容属性,并且其类型为 Object,这样就支持实际的 ContentControl(例如:Button)上的如下用法:<Button>Hello!</Button>;

Ø 类型必须声明一个类型转换器,该类型转换器将文本内容用作其初始化文本。 例如,<Brush>Blue</Brush>。 这种情况实际上并不常见;

Ø 类型必须为已知的 XAML 语言基元。

XAML内容与集合的组合语法
示例

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

Ø 省略的 StackPanel.Children 属性元素:StackPanel 从 Panel 派生。 Panel 将 Panel.Children 定义为其 XAML 内容属性。

Ø 省略的 UIElementCollection 对象元素:Panel.Children 属性采用类型 UIElementCollection,该类型实现 IList。 根据处理集合(例如 IList)的 XAML 规则,集合的元素标记可以省略。 (在这种情况下,UIElementCollection 实际无法实例化,因为它没有公开默认构造函数,这就是 UIElementCollection 对象元素以注释形式出现的原因。)

示例