《WPF基础教程XAMl》由会员分享,可在线阅读,更多相关《WPF基础教程XAMl(16页珍藏版)》请在金锄头文库上搜索。
1、本主题介绍可扩展应用程序标记语言(XAML语言的功能,并演示如何使用XAML编写 Windows Presentation Foundation(WPF 应用程序。本主题专门介绍了 Windows Presentation Foundation( WPF 实现的 XAML.XAML本身是比 Win dows Prese ntation Fou ndation( WPF 更广泛的一个语言概念。具有流控制支持的声明性语言 XAML简化了为.NET Framework编程模型创 建UI的过程。您可以在声明性XAML标记中创建可见的UI元素,然后使用代 码隐藏文件(通过分部类定义与标记相连接)将 UI
2、定义与运行时逻辑相分离。 在XAML中混合代码和标记的功能很重要,因为 XML本身是声明性的,不会为 流控制真正建议一个模型。基于 XML的声明性语言非常直观,可以为用户(尤 其是具有Web设计和技术背景的人员)创建从原型到生产的各种界面。与其他 大多数标记语言不同,XAML直接呈现托管对象的实例化。这种常规设计原则简 化了使用XAML创建的对象的代码和调试访问。XAML文件是指通常使用.xaml扩展名的XML文件。下面的XAML示例演示了小标记在创建作为 UI 一部分的按钮时的必要性。 创建的按钮通过主题样式获得默认的可视化表示形式,通过其类设计获得默认的 行为。chinaitlab中国IT
3、实验室XAML对象元素XAML有 一组规则,这些规则将对象元素映射为类或结构,将属性(Attribute )映射为属性(Property)或事件,并将XML命名空间映射为 CLR 命名空间。XAML元素映射为被引用程序集中定义的 Microsoft .NET 类型,而 属性(Attribute )则映射为这些类型的成员。上面的示例指定了两个对象元素: v STACKPANEL (具有一个结束标记)和 v BUTTON同样具有多个属性;下一节将介绍属性)。字符串StackPanel和Butt on都将映射为某个类的名称,该类由 WPF定义并且是WPF程序集的一部 分。在指定对象元素标记时,可以为
4、XAML处理创建一条指令,以便在加载XAML 页时创建指定类的一个新实例。每个实例都是通过调用基础类或结构的默认构造 函数并对结果进行 存储而创建的。为了可用作XAML中的对象元素,该类或结构 必须公开一个公共的默认(无参数)构造函数。设置属性XAML中的属性是通过使用各种可能的语法在对象元素上设置属性来设置的。 根据所设置的属性的特征,给定属性可使用的语法会有所不同。通过设置属性值,可以为对象元素添加功能或特征。对象元素的基础对象实 例的初始状态基于默认的构造函数行为。通常,您的应用程序将使用其他一些实 例,而不是任何给定对象的完全默认的实例。属性语法在XAML中,属性(Property)
5、常常可以表示为属性(Attribute) 。属性 (Attribute) 语法是最简单的属性(Property) 设置语法,并将成为过去使用标 记语言的开发人员可以使用的最直观的语法。 例如,以下标记将创建一个具有红 色文本和蓝色背景的按钮,还会创建指定为 Con te nt的显示文本。中国IT实验室B Background= Bine Forgtound= kedh Cont-eiit= This: is b. but-ton / 属性元素语法对于一个对象元素的某些属性 (Property),属性(Attribute) 语法是不可 能实现的,因为提供属性(Property)值所需的对象或信息
6、不能充分地表示为简单的字符串。对于这些情况,可以使用另一个语法,即属性元素语法。属性元素 语法用标记的内容设置包含元素的引用的属性。一般而言,内容就是作为属性值的类型的某个对象(值设置实例通常被指定为另一个对象元素)。属性元素本身 的语法为 类型名称属性。指定内容之后,必须用一个结束标记结束属性元素, 就像其他任何元素(语法为)一样。对于同时支持属性(Attribute) 和属性(Property)元素语法的属性(Property),尽管这两种语法的细微之处(如空白处理)略有不同,但它们的结果通常是一样的。如果可以使用属性(Attribute) 语法,那么使用属性(Attribute)语法通常
7、更为方便,且能够实现更为精简的标记,但这只是一个风格的问题,而不属于技术限制。下面的示例演示了在前面 的属性(Attribute)语法示例中设置的相同属性(Property),但这次对Butt on的所有属性(Property)使用了属性(Property)元素语法。Outten Foregr口vuidAQ1 q耳日若備抵d/Button. Fo 直接表示 Property 是类型名称 的属性(由属性元素内容设置) , 而绝不会是一个名称相似(碰巧名称中有一个点)但却截然不同的元素。属性和类继承作为 WPF元素的XAML属性(Attribute )而出现的属性 (Property )通 常从基
8、类继承而来。 例如,在上一个示例中, 如果您要查看类定义、 反射结果或 文档, Background 属性并不是在 Button 类上直接声明的属性。相反, Background 是从基 Control 类继承而来。WPF XAMI元素的类继承行为是与标记的基本 XML解释之间的另一个巨大 背离。使用类继承(尤其是中间基类为抽象类时) 的另一个原因在于, 通过 XML 编程常用的架构类型(如 DTD 或 XSD 格式)几乎不可能准确且完整地表示 XAML 元素及其允许属性集。另外,XAML中的“X”表示“ extensible ” (可扩展), 而可扩展性破坏了“什么是用于 WPF 的 XAM
9、”L 的任何给定表示形式的完整性。引用值和标记扩展标记扩展是一个 XAML 概念。 在属性语法中, 花括号( 和 )表示标记扩 展用法。此用法指示 XAML 处理不要像通常那样将属性值视为一个字符串或者可直接转 换为文本字符串的值。当属性采用引用类型值时, 这些属性常常需要属性元素语法 (始终创建一个 新实例) 或通过标记扩展的对象引用。 标记扩展用法有可能会返回现有实例, 因 此可以更加多样化,或者产生较少的对象系统开销。当使用标记扩展提供属性值时, 应改为由相关标记扩展的后备类中的逻辑提 供属性值。WPF应用程序编程中最常用的标记扩展是 Binding (用于数据绑定表 达式)以及资源引用
10、 StaticResource 和 DynamicResource. 通过使用标记扩展, 即使属性 ( Property ) 不支持对直接对象实例化使用属性( Attribute ) 语法,也可以使用属性 ( Attribute ) 语法为属性 ( Property ) 提供引用值; 或者使特定行为能够符合必须用属性 (Property ) 类型值填充 XAML 属性 ( Property ) 这一常规行为要求。例如,下面的示例使用属性(Attribute )语法设置Style 属性(Property ) 的值。 Style 属性 ( Property ) 采用了 Style 类的一个实例,这
11、是默认情况 下不能在属性(Attribute ) 语法字符串中指定的引用类型。但在本例中,属性 ( Attribute ) 引用了特定的标记扩展 StaticResource. 当处理该标记扩展 时,它返回对以前在资源字典中作为键控资源进行实例化的某个样式的引用。. Hesour c*sOtacJi Panel r di; Styl e = -(Stat iechina itlabi 中国IT实脸室资源只是WPF或XAML启用的一种标记扩展用法 支持Typeco nv erter 的属性值在“属性语法”一节中,曾提到属性值必须能够使用字符串进行设置。对字符串如何转换为其他对象类型或基元值的基本
12、本机处理取决于Stri ng 类型本身。但是很多 WPF类型或这些类型的成员扩展了基本字符串属性处理行为,因 此更复杂的对象类型的实例可通过字符串指定为属性值。在代码级别,此处理是通过指定处理字符串属性值的 CLR类型转换器来完成的。常用于指示矩形区域 尺寸(如Margin )的Thickness结构类型是这样一个类型的示例:它具有针对 采用该类型的所有属性(Property)公开的一个特殊的、支持类型转换器的属性(Attribute) 语法,以便于在XAML标记中使用。下面的示例使用支持类型转换 器的属性(Attribute)语法来为Margin提供值:中国ir实验童Margin - 10r
13、20,10,3011 ContenD- CJLiidi me11 /上面的属性(Attribute)语法示例与下面更为详细的语法示例等效,但在下面的示例中,Margin是通过包含Thickness 对象元素的属性(Property) 元 素语法设置的,而且Thickness的四个关键属性(Property)设置为新实例的属性(Attribute) :C lie)? aes-SEutton. Harginchinaitlab中国IT实验室ThLckness lift=*上d TomEQ Right 10 Bottom-|b30,/ 是使用支持类型转换器的语法,还是使用更详细的等效语法,通常只是编
14、码 风格的选择问题,但支持转换器的语法有助于生成更简洁的标记。(但是,有一些对象只能采用类型转换器将属性设置为该类型,因为类型对象本身并没有默认 的构造函数。例如,Cursor。)集合类型和XAML集合属性XAML指定了一个语言功能,通过该功能,可以从标记中特意省略表示集合 类型的对象元素。当XAML处理器处理采用了集合类型的属性时,将隐式创建 相应集合类型的实例,即使标记中不存在该集合的对象元素也是如此。在集合类型的SDK参考页中,特意省略集合对象元素的这种语法在XAML语法部分中有时候称为“隐式集合语法”。隐式集合语法适用于实现IList 或IDictionary的类型,或者适用于数组。您已经在XAML资源示例中看到了未调用的集合对象元素的隐式集合语法 的示例:x; Ry= JfyBrush18 Color Cold11/七ylfi TTypa=Bordr,! k: Kay-ackground Setter Pt aperty =MBacketuid11 V&lu&s Blue11/* - esotire-e sStack丄臭=iBart.yl e = -(