Windows Presentation Foundation 简介

作者: 蓝色乌托邦  来源: 博客园  发布时间:2008-09-22 21:55  阅读:244 次   原文链接   [收藏]  
Windows Presentation Foundation
Windows Presentation Foundation 简介

Windows Presentation Foundation (WPF) 是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF,您可以创建广泛的独立应用程序以及浏览器承载的应用程序。示例包括 Yahoo!MessengerNew York Times Reader 以及下图中所示的 Contoso Healthcare Sample Application

Contoso Healthcare UI 示例

WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎,旨在利用现代图形硬件的优势。WPF 通过一整套应用程序开发功能扩展了这个核心,这些功能包括 可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF 包含在 Microsoft .NET Framework 中,使您能够生成融入了 .NET Framework 类库的其他元素的应用程序。

本概述适用于新用户,其中介绍了 WPF 的关键功能和概念。经验丰富、希望回顾 WPF 的 WPF 开发人员也可以从本概述中找到有用的信息。

说明:

对于 .NET Framework 3.5 中 WPF 的新增功能和更新功能,请参见 Windows Presentation Foundation 3.5 版中的新增功能

 

本主题包括下列各节。

WPF 作为 .NET Framework 类型的一个子集存在,这些类型大多位于 System.Windows 命名空间。如果您以前已使用 .NET Framework 通过诸如 ASP.NET 和 Windows 窗体 之类的托管技术生成应用程序,那么您应该熟悉 WPF 的基本编程体验;您可以使用您最喜爱的 .NET Framework 编程语言(如 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 实现一个窗口的外观,该窗口中只包含一个按钮。

<Window
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            Title="Window with Button"
            Width="250" Height="100">
            <!-- Add button to window -->
            <Button Name="button">Click Me!</Button>
            </Window>
            

具体而言,此 XAML 分别使用 WindowButton 元素定义一个窗口和一个按钮。每个元素均配置了属性,如 Window 元素的 Title 属性,用于指定窗口的标题栏文本。在运行时,WPF 将标记中定义的元素和属性转换为 WPF 类的实例。例如,Window 元素被转换为 Window 类的实例,该类的 Title 属性 (Property) 是 Title 属性 (Attribute) 的值。

下图演示了 XAML 在上一示例中定义的 用户界面 (UI)。

包含按钮的窗口

有关更多信息,请参见 XAML 概述

由于 XAML 基于 XML,因此使用它来编写的 UI 被组合到称为“元素树”的嵌套元素层次结构中。元素树为创建和管理 UI 提供了一种逻辑且直观的方式。有关更多信息,请参见 WPF 中的树

代码隐藏

应用程序的主要行为是实现响应用户交互的功能,包括处理事件(如,单击菜单、工具栏或按钮),并调用业务逻辑和数据访问逻辑作为响应。在 WPF 中,此行为通常在与标记关联的代码中实现。此类代码称为“代码隐藏”。下面的示例演示上一示例中的代码隐藏和更新的标记。

<Window
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            x:Class="SDKSample.AWindow"
            Title="Window with Button"
            Width="250" Height="100">
            <!-- Add button to window -->
            <Button Name="button" Click="button_Click">Click Me!</Button>
            </Window>
            
using System.Windows; // Window, RoutedEventArgs, MessageBox
            namespace SDKSample
            {
            public partial class AWindow : Window
            {
            public AWindow()
            {
            // InitializeComponent call is required to merge the UI
            // that is defined in markup with this class, including 
            // setting properties and registering event handlers
            InitializeComponent();
            }
            void button_Click(object sender, RoutedEventArgs e)
            {
            // Show message box when button is clicked
            MessageBox.Show("Hello, Windows Presentation Foundation!");
            }
            }
            }
            
Visual Basic
Namespace SDKSample
            Partial Public Class AWindow
            Inherits System.Windows.Window
            Public Sub New()
            ' InitializeComponent call is required to merge the UI
            ' that is defined in markup with this class, including 
            ' setting properties and registering event handlers
            InitializeComponent()
            End Sub
            Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Show message box when button is clicked
            MessageBox.Show("Hello, Windows Presentation Foundation!")
            End Sub
            End Class
            End Namespace
            

在此示例中,代码隐藏实现一个从 Window 类派生的类。x:Class 属性用于将标记与代码隐藏类相关联。InitializeComponent 是从代码隐藏类的构造函数中调用的,用于将标记中定义的 UI 与代码隐藏类相合并。((生成应用程序时将为您生成 InitializeComponent,因此您不需要手动实现它。)x:ClassInitializeComponent 的组合确保您的实现无论何时创建都能得到正确的初始化。代码隐藏类还为按钮的 Click 事件实现了一个事件处理程序。当单击该按钮时,事件处理程序将通过调用 MessageBox..::.Show 方法显示一个消息框。

下图演示了单击按钮后的结果。

消息框

有关更多信息,请参见代码隐藏和 XAML

.NET Framework、System.Windows、标记和代码隐藏构成了 WPF 应用程序开发体验的基础。此外,WPF 还为创造具有丰富内容的用户体验提供了全面的功能。为了打包此内容并将其作为“应用程序”发送给用户,WPF 提供了一些类型和服务,它们统称为“应用程序模型”。该应用程序模型既支持开发独立应用程序,也支持开发浏览器承载的应用程序。

独立应用程序

对于独立应用程序,您可以使用 Window 类创建可从菜单栏和工具栏上访问的窗口和对话框。下图演示了带有一个主窗口和一个对话框的独立应用程序。

主窗口和对话框

此外,您还可以使用以下 WPF 对话框:MessageBoxOpenFileDialog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值