前言:为什么要学习WPF呢?因为随着现阶段硬件技术的升级以及客户对体验的要求越来越高,传统的GDI和USERS(或者是GDI+、USERS)已经不能满足这个需求,因此,WPF技术应运而生。


WPF的特点:

1、广泛整合: 在WPF出现之前,Windows开发人员若需要在普通的2D图形和控件之外再使用3D、视频、语音、富文档视图技术,就不得不学习一些独立技术,这些技术之间通常存在许多不一致,而且是在没有多少内建支持的情况下组合运用它们。而WPF通过统一的编程模型和紧密整合涵盖了所有这些部分,在紧密整合下,各种媒体类型都能组合起来并一起呈现。你可以在不同媒体类型上应用一致的效果,你所学的某个领域中的许多技术可以应用在任何其他领域。

2、与分辨率无关: 基于矢量的图形界面,分辨率越高,图形显示越清晰,而不会像普通的图形那样产生锯齿状。

3、硬件加速: 虽然WPF是项新技术,但是它是基于Direct3D创建的。特别要注意的是,在WPF应用程序中无论是2D还是3D的图形或者文字内容都会被转换为3D三角形、材质和其他Direct3D对象,并由硬件负责渲染。这意味着WPF应用程序与基于GDI的系统不同,它们可以从硬件加速中获得好处,从而获得更平滑的图像和更好的性能。WPF并不必需高端图形硬件,它也有自己的软件渲染管道。因此它不但可以使用硬件尚不支持的特性,可以高保真地打印屏幕上的任何内容,而且当遇到硬件资源不足(例如只有一块较老的图形卡,甚至是有一块高端图形卡但却没有足够的GPU资源,如缺少显存)时还可以作为备用。

4、声明式编程: WPF通过引入XAML(可扩展应用程序标记语言,Extensible ApplicationMarkup Language,读音为Zammel)将声明式编程带入下一个层次。WPF和XAML的组合十分类似于使用HTML定义一个用户界面,但却具有令人吃惊的表示能力。这种表示能力甚至超越了用户界面的范畴,WPF可以将XAML作为一种文档格式、一种3D模型表示,等等。

5、富创作和定制(Rich composition and customization): WPF控件具有你从没见过的创作能力。你可以将一些动画按钮放入一个ComboBox控件中,或者将一些视频剪辑放入一个菜单中!虽然这些特别的定制可能听起来十分恐怖,但是你不需要写多少代码(甚至不要任何代码),就能以用控件开发者们从来没有想到过的方式自定义控件(并不像以前控件技术中的自绘(owner-draw))。用同样的方法,WPF使创建完全不同外观的“皮肤”应用程序变得十分简单。

6、易于部署: WPF为(使用Windows Installer或ClickOnce)部署传统Windows应用程序或在Web浏览器中宿主应用程序提供了选择。WPF的一个新且有趣的方面是它构建在ClickOnce之上,为与Web浏览器及其导航系统的直接整合提供了支持。

WPF虽然有上述那么多闪光点,但是性能问题以及特性集不完整,也是其比较重要的不足,虽然随着技术的发展,特性集一直在完善,但是性能问题却是一个不可忽略的问题,但是由于现阶段硬件技术的飞速发展,相信不久的将来,这个也不再是问题。

WPF是跟随.NET FrameWork一起与用户见面的,是在原来的框架基础上面,新增加的组件,同时增加的组件还有WCF,WF和WCS。它主要有两个主题:针对托管代码重新设计以及强调过程式代码和声明式描述相结合。虽然WPF是针对托管代码而言的,但是,WPF确实有一些核心东西是由非托管代码实现的,甚至还提供了一些低层的非托管API来帮助你写自己的图形CODEC(编码解码器)或者位图特效。在.NET Framework的所有新增组件中,常用XAML和XML以透明的和声明式方式向外公开特性。在WPF中,XAML一般是用来表示用户界面的。在Windows Workflow Foundation(WF)中,程序也可以使用XAML来表示与工作流相关的活动。在Windows Communication Foundation(WCF)中,程序会使用XML配置文件把架构协议与应用程序协议分离开来,还可以使用XML消息和协定[简单对象访问协议(SimpleObject Access Protocol,SOAP)和Web服务描述语言(WebServices Description Language,WSDL)]与其他程序进行通信。这一切都是为了让程序员与其他领域的专家一起工作起来更方便。XAML和XML将成为所有各方使用的通用语言(很有可能通过开发工具和特定领域的设计工具)。对于WPF,“领域专家”是图形设计师,他们能够使用设计工具来创建灵活的用户界面,而程序员则可以独立地编写代码。但是程序员/设计师之所以能使用WPF进行合作,不仅仅是因为有通用的XAML语言,还因为人们已努力使WPF API所提供的功能可以通过声明方式进行访问。这给予设计工具巨大的表现力,而不用费心生成过程式代码了。

另外需要注意的是,WPF仅在Windows Vista及其以后的版本中,3D 对象有抗锯齿特性;仅在Windows Vista及其以后的版本中,非矩形或者透明窗口才支持硬件加速。当然,WPF控件有不同的默认主题来匹配它们的宿主操作系统。

在Windows XP系统中,运行多个WPF或DirectX应用程序可能会让系统出现停顿,这是由于驱动的问题,在Windows Vista及其以后的版本中,有一个新的驱动模型来解决资源争夺的问题。它会对GPU资源进行虚拟化和安排,当多个使用GPU的应用程序同时运行时,它可以让你的系统运行得更顺畅。

By:http://blog.sina.com.cn/s/blog_6d3615260100vqy1.html

WPF特点的更多相关文章

  1. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  2. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  3. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  4. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  5. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  6. MVVM模式解析和在WPF中的实现(三)命令绑定

    MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  7. MVVM模式和在WPF中的实现(二)数据绑定

    MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  8. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  9. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  10. WPF 微信 MVVM

    公司的同事离职了,接下来的日子可能会忙碌,能完善DEMO的时间也会少了,因此,把做的简易DEMO整体先记录一下,等后续不断的完善. 参考两位大神的日志:WEB版微信协议部分功能分析.[完全开源]微信客 ...

随机推荐

  1. 视频转GIF+GIF录制

    GIF录制 Windows--oCam oCam使用非常简便,它还可以用来录音,录制视频,并且是单文件版,很小,使用也非常方便,如果用来录制GIF,大家导出录制的视频选择GIF格式就可以了: Wind ...

  2. C语言基础 -- 变量

    常用变量类型 ​​ 地址 小端 低地址保存低位,高地址保存高位 常用于 PC(复杂指令集) 大端 低地址保存高位,高地址保存低位 常用于 ARM/手机/网络(精简指令集)

  3. Redis的面试问题总结,面试跳槽必备

    1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库 ...

  4. [需求设计]从一个小需求感受Redis的独特魅力

    分享一个简单的小需求应该怎么设计实现以及有关Redis的使用 Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的.之前写 ...

  5. Pycharm报错连接linux服务器报错:Could not verify `ssh-rsa` host key with fingerprint

    忘记了截图,后来解决了就懒得再去重新制造错误了.大概记得是通过ssh连接linux时,报错 Could not verify `ssh-rsa` host key with fingerprint . ...

  6. Spring之junit测试集成

    简介 Spring提供spring-test-5.2.1.RELEASE.jar 可以整合junit. 优势:可以简化测试代码(不需要手动创建上下文,即手动创建spring容器) 使用spring和j ...

  7. webpack4.0安装及使用(一)

    前言  1.什么是webpack 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建 ...

  8. python读写配置文件使用总结与避坑指南

    关于今天的内容 最近拿python在写项目部署的相关集成代码,本来两天的工作量,硬是在来回的需求变更中,拖到了一周的时间.今天算是暂时告一段落了.这次由于涉及多个系统的调用和配置参数,代码开发中出现了 ...

  9. 区块链学习笔记:DAY01 区块链的技术原理

    其实很早之前就听过区块链,也看过有关区块链的介绍,那个时候的理解主要还是一句话:分布式记账 然后开始关注比特币,听了有几年了,对于其来历.用途其实一直都是一知半解. 这次的课算是第一次以一个学员的身份 ...

  10. Java语法进阶13-文件、IO流

    File File是文件和目录路径名的抽象表示形式,即File类是文件或目录的路径,而不是文件本身,因此File类不能直接访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流. File ...