作者:empty 出版社:empty |
WPF的核心是一个与分辨率无关且基于矢量的呈现引擎, 旨在充分利用现代图形硬件。WPF通过一套完善的应用程序开发功能对该核心进行了扩展.这些功能包括可扩展应用程序标记语(XAML) 、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF属于.NET, 因此可以生成整合.NET API其他元集的应用程序。本概述适用于新用户, 介绍了WPF的主要功能和概念。使用WPF进行编程WPF作为大部分位于System.Windows命名空间中的.NET类型的一个子集存在。如果你之前使用托管技术(如ASPNET和Windows窗体) 通过.NET生成过应用程序, 则不会对基本的WPF编程体验感到陌生:你可以使用最喜欢的NET编程语言(如C#或VisualBasic) 来完成实例化类, 设置属性、调用方法以及处理事件等操作。WPF还包括增强属性和事件的其他编程构造:依赖项属性和路由事件。标记和代码隐藏通过WPF, 可以使用标记和代码隐藏开发应用程序, 这是ASPNET开发人员已经熟悉的体验****。通常使用XAML标记实现应用程序的外观,同时使用托管编程语言(代码隐藏)来实现其行为。这种外观和行为的分离具有以下优点:·降低了开发和维护成本,因为特定于外观的标记与特定于行为的代码不紧密耦合,·开发效率更高,因为设计人员在实现应用程序外观的同时,开发人员可以实现应用程序的行为。·WPF应用程序的全球化和本地化得以简化。标记XAML是一种基于XML的标记语言, 以声明形式实现应用程序的外观。通常用它创建窗、对话框、页和用户控件,并填充控件、形状和图形。下面的示例使用XAML来实现包含一个按钮的窗的外观:
具体而書, 此XAML通过分别使用Min dow和Button元素来定义窗和按钮。每个元素均配置了特性(如Mind os元素的Title特性) 来指定窗的标题栏文本, 在运行时, WPF会将标记中定义的元素和特性转换为WPF类的实例。例如, Mind ou元素被转换为Window类的实例, 该类的Title属性是Title特性的值。由于XAML是基于XML的, 因此使用它编军的UI汇集在嵌套元素的层次结构中, 称为元素柯, 元素树提供了一种应用程序的主要行为是实现响应用户交互的功能,包括处理事件(例如,单击菜单、工具栏或按钮)以及相应地调用业务逻辑和数据访问逻辑。在WPF中, 在与标记相关联的代码中实现此行为。此类代码称为代码隐藏。下面的示
在此示例中, 代码隐藏实现派生自Window类的类。x:Class特性用于将标记与代码隐藏类相关联。从代码隐藏类的构造函数调用Initialize Corp on ent.以将标记中定义的UI与代码藏类合井在一起。(Initialize Con ponent生成应用程序时将为你生成, 这就是不需要手动实现它的原因。) 和的组合x:Class InitializeComponent可确保你的实现在创建时正确初始化。代码隐藏类还可实现按研的Click事件的事件处理程序。单击该按钮后, 事件处理程序会通过调用System.Windows MessageBox.Show方法显示一个消息框。下图显示了单击按钮时的结果;
变化, WPF为你提供一流的可扩展布局系统, 而不强制你编写代码以适应这些情况下的布局。c Mind cu布局系统的基础是相对定位,这提高了适应不断变化的窗和显示条件的能力。此外,该布局系统还可管理控件之间的协商以确定布局。协商是一个两步过程:首先,控件将需要的位道和大小告知父级:其次,父级将控件可以有的空间告知控件。该布局系统通过基WPF类公开给子控件。对于通用的布局(如网格、堆叠和停靠) , WPF包栝若干布局控件:·Canvas:子控件提供其自己的布局。·Dock Panel:子控件与面板的边缘对齐。·Grid:子哲件由行和列定位。·Stack Panel:子控件垂直或水平堆叠。·Virtualizing Stack Panel:子控件在水平或垂直的行上虚拟化井挂列。·Wrap Panel:子控件按从左到右的顺序定位, 在当前行上的控件超出尤许的空间时.换行到下一行。下面的示例使用Dock Panel来布局几个TextBox挂件:Dock Panel尤许子TextBox控件, 以告诉它如何排列这些控件。为了完成此操作, Dock Panel实现Dack附加了属大多数应用程序旨在为用户提供查看和编辑数据的方法。对于WPF应用程序, 已对存储和访问数据的工作提供技术(如SQLServer和A DO NET) 。访问数据并将数据加载到应用程序的托管对象后, WPF应用程序的复杂工作开为了简化应用程序开发.WPF提供了一个数据绑定引擎来自动执行这些步骤。数据绑定引擎的核心单元是Binding下一示例演示如何将TextBox绑定到自定义Parson对象的实例。下面的代码演示了Person实现: