WPF对决Silverlight:为项目选择最佳技术

简介:
在何时使用WPF,何时使用Silverlight的问题上,很多人备感困惑。为项目选择正确的技术取决于应用程序的需求,以及WPF和Silverlight能力的不同之处。
  Silverlight最初称为WPF/E(E来自于Everywhere的首字母),是面向运行在浏览器中的Web应用程序的一个WPF子集。如今,Silverlight以其快速的开发周期广为所知,且持续得到众人的关注,很多人认为它会成为微软未来的重要开发平台。 Mike Strobel认为微软对WPF/Silverlight的 考虑有一些混乱
我认为最重要的事情,是提升WPF本身的影响。微软应该推动WPF成为富桌面应用程序的“核心”平台。然而恰恰相反,微软此时正推进Silverlight成为这样的平台。这会误导那些对两个平台都陌生,且不明白Silverlight不兼容标准.NET函数库的人。
  某些人则认为WPF就快消亡了,不过Brian Noyes,一个微软区域技术领袖(Microsoft Regional Director)及微软最有价值专家(MVP),相信至少在未来几年不会出现这种情况。为了证明对WPF的这种看法,Noyes在如下几个方面强调了WPF和Silverlight之间的一些重要不同点: 
特性 WPF Silverlight
文件访问 无限制 可访问用户文件夹:我的文档、我的照片、我的视频等
打印 具有很多选项,可访问打印对话框、打印队列等 需编程打印UI元素
文档编辑 支持流文档和固定文档,有RichTextBox编辑支持,并能和流文档进行集成 RichTextArea具备WPF的RichTextBox的大部分功能
命令 支持在按钮、超链接和菜单项上触发命令,键盘快捷键的输入可绑定到命令上,可实现路由命令 支持在按钮、超链接和上下文菜单项上触发命令,无输入绑定,无路由命令
通信 支持WCF的完整功能,能够调用和托管任何类型的服务,支持完整的安全选项和其他WS-*协议,支持REST和很多种低级通信方式 有限的WCF客户端功能子集,不能在客户端上暴露服务,支持不安全TCP或HTTP协议,比WCF客户端弱的双向通信(只能使用HTTP或不安全TCP),支持某些socket级的功能,在很多部署场景中必须考虑跨域访问问题。
剪贴板 任何可序列化的对象 只支持文本
拖拽 任何东西 只能是文件
外部设备 有驱动、COM、Win32或通信协议支持的任何设备 网络摄像头、麦克风和有COM API或通信协议支持的设备
输入 键盘、鼠标、手写笔、触摸屏,基本没有任何限制 必须在信任提升的OOB中,全屏时才能获得完整的键盘支持
  在WPF和Silverlight中还有一些不同的基本功能,这也可帮助大家来决定使用哪种技术。下面的例子,是一些开发人员做出选择的解释。
   Joe Gilkey在回答 选择WPF而非Silverlight的问题时,解释了它的公司为何在一个项目中选择了WPF,而在另外项目中选择Silverlight:
在规划我们的软件产品时,确实遇到了这样的问题。对于我们而言,决定因素是是否需要访问本地硬件,以及(或者)本地数据库。我们的主打产品,需要在本地100%地运行。我们需要在本地SQL数据库中缓存信息,并且要访问一些硬件设备(GPS接收器、串口、WCF点对点通道、同步服务等等)。那个产品就由WPF来编写。而其他两个开发之中的产品,不用在本地保存信息(除了使用独立存储区),所以我们转而使用Silverlight。两个Silverlight产品都支持脱离浏览器安装方式。WPF应用程序的另外一个决定因素是对触摸的支持更加友好。感谢Surface团队,帮助我们在WPF应用程序中使用针对Windows Touch功能的Surface Toolkit。
  另外一个开发人员,Jeff解释了为什么他的公司 一开始使用WPF开发的项目后来又转用Silverlight
一年前,我们使用WPF开发了多媒体发送系统的自定义客户端。明年,我们将用Silverlight应用程序来替换这个WPF客户端。为什么?目前我们的大部分应用程序都是基于Web/浏览器的,不过我们也需要一个静态客户端来处理硬件交互和一些相对复杂的问题。现在,Silverlight具有的OOB模式意味着我们能够通过COM来连接本地硬件,这样问题就迎刃而解。为什么Silverlight在对战WPF中胜出呢——这是因为我们客户的运行环境的安装问题。不必自己处理操作系统的不兼容和功能差异,Silverlight都能正常运行。并且,现在升级也轻而易举,只用升级服务器,客户端就能自动升级。当然,WPF更加强大,不过很多东西我们用不上。
  在解释了WPF和Silverlight的区别之后, Noyes总结道
根本的决定因素是,如果你的客户端应用程序主要是为了展现后端数据的前端界面的话——选择Silverlight 4已经完全足够。不过,如果你的客户端应用程序需要更紧密地和客户端机器集成,并且其他一些东西也要放在客户端的话,使用SL4的信任提升OOB模式也可能胜任,但是这样会给开发带来更多的挑战,也可能需要牺牲开发效率或功能来达成开发目标。你需要切切实实地做好前端需求分析,如果应用程序和客户端机器资源有大量的交互的,WPF仍旧是最好的选择,能让你的开发工作事半功倍。
  关于未来,一个微软的资深产品经理Pete Brown,认为这两种技术, WPF和Silverlight最终将合二为一
我最近和微软的Ian Ellison-Taylor交谈过。Ian是一个直接向Scott Guthrie报告的总经理。在很多工作中,他的团队要开发Silverlight和WPF两者中的东西(以及RIA Services和其他很多东西)。我提到,我想在未来获得一些小道消息,他说可以为我提供一些。所以,他和我谈到了Silverlight和WPF合二为一的事情,并在随后互发了一些关于这个话题的邮件。
未来,Silverlight和WPF很可能会成为一个基于同一份代码的单一技术。毕竟,Silverlight是源自于所谓的WPF/E(E表示Everywhere),并以我们出乎意料的方式,弃用了这个丑陋的开发代号,而创造了一个美妙的产品名称(Silverlight)。
  在给出相关建议的时候,Brown的观点和Noyes的也类似:“向右看,Silverlight是完成面向跨平台RIA的最好方式。向左看,WPF是编写用于Windows 7的托管代码应用程序的最好方式。”

本文转自冷秋寒 51CTO博客,原文链接:http://blog.51cto.com/kevinfan/327692 ,如需转载请自行联系原作者

相关文章
|
缓存 C# 虚拟化
WPF列表性能提高技术
WPF数据绑定系统不仅需要绑定功能,还需要能够处理大量数据而不会降低显示速度和消耗大量内存,WPF提供了相关的控件以提高性能,所有继承自`ItemsControl`的控件都支持该技术。
|
C# Windows
WPF技术之RichTextBox控件
WPF RichTextBox是Windows Presentation Foundation (WPF)中提供的一个强大的文本编辑控件,它可以显示富文本格式的文本,支持多种文本处理操作。
582 0
|
2月前
|
设计模式 前端开发 C#
WPF 项目中 MVVM模式 的简单例子说明
本文通过WPF项目中的加法操作示例,讲解了MVVM模式的结构和实现方法,包括数据模型、视图、视图模型的创建和数据绑定,以及命令的实现和事件通知机制。
|
3月前
|
持续交付 C# 敏捷开发
“敏捷之道:揭秘WPF项目中的快速迭代与持续交付——从需求管理到自动化测试,打造高效开发流程的全方位指南”
【8月更文挑战第31天】敏捷开发是一种注重快速迭代和持续交付的软件开发方法,通过短周期开发提高产品质量并快速响应变化。本文通过问题解答形式,探讨在Windows Presentation Foundation(WPF)项目中应用敏捷开发的最佳实践,涵盖需求管理、版本控制、自动化测试及持续集成等方面,并通过具体示例代码展示其实施过程,帮助团队提升代码质量和开发效率。
70 0
|
3月前
|
C# 开发者 Windows
勇敢迈出第一步:手把手教你如何在WPF开源项目中贡献你的第一行代码,从选择项目到提交PR的全过程解析与实战技巧分享
【8月更文挑战第31天】本文指导您如何在Windows Presentation Foundation(WPF)相关的开源项目中贡献代码。无论您是初学者还是有经验的开发者,参与这类项目都能加深对WPF框架的理解并拓展职业履历。文章推荐了一些适合入门的项目如MvvmLight和MahApps.Metro,并详细介绍了从选择项目、设置开发环境到提交代码的全过程。通过具体示例,如添加按钮点击事件处理程序,帮助您迈出第一步。此外,还强调了提交Pull Request时保持专业沟通的重要性。参与开源不仅能提升技能,还能促进社区交流。
43 0
|
3月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
63 0
|
3月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
199 0
|
3月前
|
开发者 C# 容器
【独家揭秘】当WPF邂逅DirectX:看这两个技术如何联手打造令人惊艳的高性能图形渲染体验,从环境搭建到代码实践,一步步教你成为图形编程高手
【8月更文挑战第31天】本文通过代码示例详细介绍了如何在WPF应用中集成DirectX以实现高性能图形渲染。首先创建WPF项目并使用SharpDX作为桥梁,然后在XAML中定义承载DirectX内容的容器。接着,通过C#代码初始化DirectX环境,设置渲染逻辑,并在WPF窗口中绘制图形。此方法适用于从简单2D到复杂3D场景的各种图形处理需求,为WPF开发者提供了高性能图形渲染的技术支持和实践指导。
189 0
|
3月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
220 0
|
3月前
|
C# UED 开发者
WPF打印功能实现秘籍:从页面到纸张,带你玩转WPF打印技术大揭秘!
【8月更文挑战第31天】在WPF应用开发中,打印功能至关重要,不仅能提升用户体验,还增强了应用的实用性。本文介绍WPF打印的基础概念与实现方法,涵盖页面元素打印、打印机设置及打印预览。通过具体案例,展示了如何利用`PrintDialog`和`PrintDocument`控件添加打印支持,并使用`PrinterSettings`类进行配置,最后通过`PrintPreviewWindow`实现打印预览功能。
265 0