【Asp.net精品源码栏目提醒】:以下是网学会员为您推荐的Asp.net精品源码-【精品】WFP简介 - 其它资料,希望本篇文章对您学习有所帮助。
Windows Presentation Foundation 简介.NET Framework 3.5其他版本更新:2007 年 11 月Windows Presentation Foundation WPF 是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。
使用 WPF,您可以创建广泛的独立应用程序以及浏览器承载的应用程序。
示例包括 YahooMessenger 和 New York Times Reader 以及下图中所示的 ContosoHealthcare Sample Application。
WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎,旨在利用现代图形硬件的优势。
WPF 通过一整套应用程序开发功能扩展了这个核心,这些功能包括 可扩展应用程序标记语言 XAML、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。
WPF 包含在 Microsoft .NET Framework 中,使您能够生成融入了 .NET Framework 类库的其他元素的应用程序。
本概述适用于新用户,其中介绍了 WPF 的关键功能和概念。
经验丰富、希望回顾 WPF 的 WPF 开发人员也可以从本概述中找到有用的信息。
说明:对于 .NET Framework 3.5 中 WPF 的新增功能和更新功能,请参见 Windows PresentationFoundation 3.5 版中的新增功能。
本主题包括下列各节。
使用 WPF 编程 标记和代码隐藏 应用程序 控件 输入和命令 布局 数据绑定 图形 动画 媒体 文本和版式 文档 自定义 WPF 应用程序 WPF 最佳做法 摘要 推荐的概述和示例 相关主题使用 WPF 编程WPF 作为 .NET Framework 类型的一个子集存在,这些类型大多位于 System.Windows 命名空间。
如果您以前已使用 .NET Framework 通过诸如
ASP.NET 和 Windows 窗体 之类的托管技术生成应用程序,那么您应该熟悉 WPF 的基本编程体验;您可以使用您最喜爱的 .NETFramework 编程语言(如 C 或 Visual Basic)实例化类、设置属性、调用方法以及处理事件。
为了支持某些更强大的 WPF 功能并简化编程体验,WPF 包括了更多编程构造,这些编程构造增强了属性和事件:依赖项属性和路由事件。
有关依赖项属性的更多信息,请参见依赖项属性概述。
有关路由事件的更多信息,请参见路由事件概述。
标记和代码隐藏WPF 为 Windows 客户端应用程序开发提供了更多编程增强功能。
一个明显的增强功能就是使用标记和代码隐藏开发应用程序的功能,
ASP.NET 开发人员应该熟悉此体验。
您通常使用可扩展应用程序标记语言 XAML 标记实现应用程序的外观,而使用托管编程语言(代码隐藏)实现其行为。
这种外观和行为的分离具有以下优点: 降低了开发和维护成本,因为外观特定的标记并没有与行为特定的代码紧密耦合。
开发效率更高,因为设计人员可以在开发人员实现应用程序行为的同时实现应用程序的外 观。
可以使用多种设计工具实现和共享 XAML 标记,以满足应用程序开发参与者的要求: Microsoft Expression Blend 提供了适合设计人员的体验,而 Visual Studio 2005 针对 开发人员。
WPF 应用程序的全球化和本地化大大简化(请参见 WPF 全球化和本地化概述)。
下面简单介绍了 WPF 标记和代码隐藏。
有关此编程模型的更多信息,请参见 XAML 概述和代码隐藏和 XAML。
标记XAML 是一种基于 XML 的标记语言,用于以声明的方式实现应用程序的外观。
它通常用于创建窗口、对话框、页面和用户控件,并用控件、形状和图形填充它们。
下面的示例使用 XAML 实现一个窗口的外观,该窗口中只包含一个按钮。
VBCCFJScript复制不支持该语言或没有可用的代码示例。
具体而言,此 XAML 分别使用 Window 和 Button 元素定义一个窗口和一个按钮。
每个元素均配置了属性,如 Window 元素的 Title 属性,用于指定窗口的标题栏文本。
在运行时,WPF 将标记中定义的元素和属性转换为 WPF 类的实例。
例如,Window 元素被转换为 Window 类的实例,该类的 Title 属性 Property 是 Title 属性 Attribute 的值。
下图演示了 XAML 在上一示例中定义的 用户界面 UI。
有关更多信息,请参见 XAML 概述。
由于 XAML 基于 XML,因此使用它来编写的 UI 被组合到称为“元素树”的嵌套元素层次结构中。
元素树为创建和管理 UI 提供了一种逻辑且直观的方式。
有关更多信息,请参见 WPF 中的树。
代码隐藏应用程序的主要行为是实现响应用户交互的功能,包括处理事件(如,单击菜单、工具栏或按钮),并调用业务逻辑和数据访问逻辑作为响应。
在 WPF 中,此行为通常在与标记关联的代码中实现。
此类代码称为“代码隐藏”。
下面的示例演示上一示例中的代码隐藏和更新的标记。
VBCCFJScript复制不支持该语言或没有可用的代码示例。
VBCCFJScript复制Namespace SDKSample Partial Public Class AWindow Inherits System.Windows.Window Public Sub New InitializeComponent call is required to merge theUI that is defined in markup with this class including setting properties and registering event handlers InitializeComponent End Sub Private Sub button_ClickByVal sender As Object ByVal e As RoutedEventArgs Show message box when button is clicked MessageBox.ShowHello Windows Presentation Foundation End Sub End ClassEnd Namespace在此示例中,代码隐藏实现一个从 Window 类派生的类。
x:Class 属性用于将标记与代码隐藏类相关联。
InitializeComponent 是从代码隐藏类的构造函数中调用的,用于将标记中定义的 UI 与代 码隐藏类相合并。
生成应用程序时将为您生成 InitializeComponent, ( 因此您不需要手动实现它。
)x:Class 和 InitializeComponent 的组合确保您的实现无论何时创建都能得到正确的初始化。
代码隐藏类还为按钮的 Click 事件实现了一个事件处理程序。
当单击该按钮时,事件处理程序将通过调用 MessageBox.Show 方法显示一个消息框。
下图演示了单击按钮后的结果。
有关更多信息,请参见代码隐藏和 XAML。
应用程序.NET Framework、System.Windows、标记和代码隐藏构成了 WPF 应用程序开发体验的基础。
此外,WPF 还为创造具有丰富内容的用户体验提供了全面的功能。
为了打包此内容并将其作为“应用程序”发送给用户,WPF 提供了一些类型和服务,它们统称为“应用程序模型”。
该应用程序模型既支持开发独立应用程序,也支持开发浏览器承载的应用程序。
独立应用程序对于独立应用程序,您可以使用 Window 类创建可从菜单栏和工具栏上访问的窗口和对话框。
下图演示了带有一个主窗口和一个对话框的独立应用程序。
此外,您还可以使用以下 WPF 对话框:MessageBox、OpenFileDialog、SaveFileDialog 和PrintDialog。
有关更多信息,请参见 WPF Windows 概述。
浏览器承载的应用程序对于浏览器承载的应用程序(称为 XAML 浏览器应用程序 XBAP),您可以创建能够使用超链接(Hyperlink 类)导航的页面 Page 和页函数 PageFunctionOf T。
下图演示了 InternetExplorer 7 承载的 XBAP 中的页面。
WPF 应用程序既可以承载于 Microsoft Internet Explorer 6 中,也可以承载于 InternetExplorer 7 中。
WPF 提供了以下两个选项作为替代导航宿主: Frame ,用于承载页面或窗口中可导航内容的孤岛。
NavigationWindow ,用于承载整个窗口中的可导航内容。
有关更多信息,请参见导航概述。
应用程序类XBAP 和独立应用程序通常非常复杂,需要额外的应用程序范围的服务,包括启动和生存期管理、共享属性以及共享资源。
Application 类封装了这些服务以及更多内容,并且只需使用 XAML 即可实现,如下面的示例所示。
VBCCFJScript复制不支持该语言或没有可用的代码示例。
此标记是独立应用程序的应用程序定义,并指示 WPF 创建一个在应用程序启动时自动打开MainWindow 的 Application 对象。
理解 Application 的一个关键概念在于,它为独立应用程序和浏览器承载的应用程序提供了一个通用的支持平台。
例如,浏览器承载的应用程序可以使用前面的 XAML,以便在 XBAP 启动时自动导航到某个页面,如下面的示例所示。
VBCCFJScript复制不支持该语言或没有可用的代码示例。
有关更多信息,请参见应用程序管理概述。
安全性由于 XBAP 承载于浏览器中,因此安全性至关重要。
特别是,XBAP 使用部分信任的安全性沙盒强制施加限制,这些限制少于或等于对基于 HTML 的应用程序所施加的限制。
此外,可以从部分信任的 XBAP 中安全运行的每个 HTML 功能都使用全面的安全进程进行了测试,WindowsPresentation Foundation 安全策略 — 安全工程中对此进行了详细介绍。
尽管如此,大部分 WPF 功能仍能够从 XBAP 中安全执行,如 Windows PresentationFoundation 部分信任安全性中所述。
控件应用程序模型提供的用户体验是构造控件。
在 WPF 中,“控件”是一个总括性术语,适用于窗口或页面中承载的、具有 用户界面 UI 并且实现某些行为的一种 WPF 类。
有关更多信息,请参见控件概述。
有关介绍性示例,请参见控件库示例。
WPF 控件一览此处列出了内置的 WPF 控件。
按钮:Button 和 RepeatButton。
对话框:OpenFileDialog、PrintDialog 和 SaveFileDialog。
数字墨迹:InkCanvas 和 InkPresenter。
文档:DocumentViewer、FlowDocumentPageViewer、FlowDocumentReader、 FlowDocumentScrollViewer 和 StickyNoteControl。
输入:TextBox、RichTextBox 和 PasswordBox。
布局:Border、BulletDecorator、Canvas、DockPanel、Expander、Grid、GridView、 GridSplitter、GroupBox、Panel、ResizeGrip、Separator、ScrollBar、ScrollViewer、 StackPanel、Thumb、Viewbox、VirtualizingStackPanel、Window 和 WrapPanel。
媒体:Image、MediaElement 和 SoundPlayerAction。
菜单:ContextMenu、Menu 和 ToolBar。
导航:Frame、Hyperlink、Page、NavigationWindow 和 TabControl。
选择:CheckBox、ComboBox、ListBox、TreeView、RadioButton 和 Slider。
用户信息:AccessText、Label、Popup、ProgressBar、StatusBar、TextBlock 和 ToolTip。
输入和命令控件通常检测和响应用户输入。
WPF 输入系统使用直接事件和路由事件来支持文本输入、焦点管理和鼠标定位。
有关更多信息,请参见输入概述。
应用程序通常具有复杂的输入要求。
WPF 提供了一个命令系统,它将用户输入操作与响应这些操作的代码相分离。
有关更多信息,请参见命令概述。
布局创建 UI 时,您通过按位置和大小排列控件来形成一种布局。
任何布局的主要要求都是适应窗口大小和显示设置的变化。
WPF 为您提供了一个一流的可扩展布局系统,而不是强制您编写代码以使布局适应这些情况。
布局系统的基础是相对定位,它提高了适应窗口和显示条件变化的能力。
此外,布局系统还管理控件之间的协商以确定布局。
协商过程分为两步:第一步,控件向父控件通知它所需的位置和大小;第二步,父控件通知该控件它可以具有多大空间。
布局系统通过基本 WPF 类公开给子控件。
对于通用的布局,如网格、堆叠和停靠,WPF 包括了几个布局控件: Canvas :子控件提供其自己的布局。
DockPanel :子控件与面板的边缘对齐。
Grid :子控件按行和列放置。
StackPanel :子控件垂直或水平堆叠。
VirtualizingStackPanel :子控件被虚拟化,并沿水平或垂直方向排成一行。
WrapPanel :子控件按从左到右的顺序放置,如果当前行中的控件数多于该空间所允许的 控件数,则换至下一行。
下面的示例使用 DockPanel 排列几个 TextBox 控件。
VBCCFJScript复制不支持该语言或没有可用的代码示例。
DockPanel 允许子 TextBox 控件通知它如何排列这些子控件。
为此,DockPanel 实现一个 Dock属性,该属性公开给子控件,以便每个子控件指定一个停靠样式。
说明:由父控件实现的、供子控件使用的属性是一种 WPF 构造,称为“附加属性”(请参见附加属性概述)。
下图演示了上一示例中 XAML 标记的结果。
有关更多信息,请参见布局系统。
有关介绍性示例,请参见 WPF 布局库示例。
数据绑定创建大多数应用程序的目的是为用户提供查看和编辑数据的方式。
对于 WPF 应用程序,存储和访问数据的工作已经由 Microsoft SQL Server 和 ADO.NET 之类的技术提供。
访问数据并将数据加载到应用程序的托管对象中后,WPF 应用程序的复杂工作才开始。
实质上它涉及到两个步骤: 1. 将数据从托管对象复制到控件中,在控件上可以显示和编辑数据。
2. 确保将使用控件对数据进行的更改复制回托管对象。
为了简化应用程序开发,WPF 提供了一个数据绑定引擎以自动执行这些步骤。
数据绑定引擎的核心单元是 Binding 类,它的任务是将控件(绑定目标)绑定到数据对象(绑定源)。
下图说明了这种关系。
下面的示例演示如何将 TextBox 绑定到自定义 Person 对象的实例。
下面的代码演示了 Person的实现。
VBCCFJScript复制Namespace SDKSample Class Person Private _name As String No Name Public Property Name As String Get Return _name End Get SetByVal value As String _name value End Set End Property End ClassEnd Namespace下面的标记将 TextBox 绑定到自定义 Person 对象的实例。
VBCCFJScript复制不支持该语言或没有可用的代码示例。
VBCCFJScript复制Imports System.Windows WindowNamespace SDKSample Partial Public Class DataBindingWindow Inherits Window Public Sub New InitializeComponent Create Person data source Dim person As Person New Person Make data source available for binding Me.DataContext person End Sub End ClassEnd Namespace在此示例中,Person 类在代码隐藏中实例化,并被设置为 DataBindingWindow 的数据上下文。
在标记中,将 TextBox 的 Text 属性绑定到 Person.Name 属性(使用“Binding ... ”XAML语法)。
此 XAML 通知 WPF 将 TextBox 控件绑定到存储在窗口的 DataContext 属性中的Person 对象。
WPF 数据绑定引擎还提供了其他支持,包括验证、排序、筛选和分组。
此外,当标准 WPF 控件显示的 UI 不合适时,数据绑定还支持使用数据模板为绑定的数据创建自定义 UI。
有关更多信息,请参见数据绑定概述。
有关介绍性示例,请参见数据绑定演示。
图形WPF 引进了一组广泛的、可伸缩且灵活的图形功能,它们具有以下优点: 与分辨率和设备无关的图形。
WPF 图形系统的基本度量单位是与设备无关的像素,它等于 一英寸的 1/96,而不管实际的屏幕分辨率是多少,为与分辨率和设备无关的呈现提供了基础。
每个与设备无关的像素都会自动缩放,以符合呈现该像素的系统上的每英寸点数 dpi 设置。
更高的精度。
WPF 坐标系是使用双精度浮点数字测量的,而不是使用单精度浮点数字。
转 换值和不透明度值也以双精度表示。
WPF 还支持广泛的颜色域 scRGB,并为管理来自不 同颜色空间的输入提供完整的支持。
高级图形和动画支持。
WPF 通过为您管理动画场景简化了图形编程;您不需要担心场景处 理、呈现循环和双线性内插算法。
此外,WPF 还提供了命中测试支持和全面的 alpha 合成 支持。
硬件加速。
WPF 图形系统利用了图形硬件的优势来最小化 CPU 使用率。
二维形状WPF 提供了一个库,包含用矢量绘制的通用 二维 形状,如下图中演示的矩形和椭圆。
形状具有一个有趣的功能:它们不仅仅用于显示,还实现了您可以从控件中获得的许多功能,包括键盘和鼠标输入。
下面的示例演示正在处理的 Ellipse 的 MouseUp 事件。
VBCCFJScript复制不支持该语言或没有可用的代码示例。
VBCCFJScript复制Imports System.Windows Window MessageBoxImports System.Windows.Input MouseButtonEventArgsNamespace SDKSample Public Class EllipseEventHandlingWindow Inherits Window Public Sub New InitializeComponent End Sub Private Sub clickableEllipse_MouseUpByVal sender As Object ByVal e As MouseButtonEventArgs MessageBox.ShowYou clicked the ellipse End Sub End ClassEnd Namespace下图演示了以上代码生成的结果。
有关更多信息,请参见 WPF 中的形状和基本绘图概述。
有关介绍性示例,请参见 形状元素示例。
二维几何图形WPF 提供的二维形状涵盖了基本形状的标准集合。
但是,您可能需要创建自定义形状以帮助设计自定义的 UI。
出于此目的,WPF 提供了几何图形。
下图演示了使用几何图形创建一个可以直接绘制、用作画笔或用于剪裁其他形状和控件的自定义形状。
Path 对象可用于绘制闭合或开放形状、多线形状,甚至曲线形状。
Geometry 对象可用于对二维图形数据进行剪裁、命中测试和呈现。
有关更多信息,请参见 Geometry 概述。
有关介绍性示例,请参见几何图形示例。
二维效果WPF 二维功能的子集包括渐变、位图、绘图、视频绘制、旋转、缩放和扭曲等视觉效果。
这些都可以使用画笔完成;下图演示了某些示例。
有关更多信息,请参见 WPF 画笔概述。
有关介绍性示例,请参见 Brush 示例。
三维呈现WPF 还包括三维呈现功能,这些功能可以与二维图形进行集成,以便于创建更激动人心、更有趣的UI。
例如,下图演示了呈现在三维形状上的二维图像。
有关更多信息,请参见三维图形概述。
有关介绍性示例,请参见三维实体示例。
动画WPF 动画支持可以使控件变大、旋转、调节和淡化,以产生有趣的页面过渡和更多效果。
您可以对大多数 WPF 类(甚至自定义类)进行动画处理。
下图演示了一个简单的活动动画。
有关更多信息,请参见动画概述。
有关介绍性示例,请参见动画示例库。
媒体传达丰富内容的一个方法是使用视听媒体。
WPF 为图像、视频和音频提供了特殊的支持。
图像图像对大多数应用程序来说都很常见,WPF 提供了几种方式来使用图像。
下图演示了具有一个列表框的 UI,该列表框中包含缩略图图像。
当选中一个缩略图时,该图像将以完整大小显示。
上一篇:
Visual Basic .NET 程序设计【特荐
下一篇:
女人七种行为逼男人想离婚