从WPF迁移到Silverlight:主要差异是什么?

Phi*_*ler 11 silverlight wpf mvvm silverlight-4.0

我做了使用WPF一个完整的项目,并有(至少)的主要概念,如XAML,数据绑定和MVVM一个很好的把握.我们"手工"完成了所有工作 - 我们没有使用MVVM框架或第三方工具.所有XAML都是手工编写的(没有Blend).

新项目,我会在几周内开始是相当重型Silverlight的,我期待起床尽快提速.然而,我读到的关于SL入门的大部分文章都集中在XAML和数据绑定上.自从我介绍这些概念仍然在我的记忆很新鲜,我当然可以理解为什么这些教程会花很多时间在这些问题上 - 的学习曲线是非常陡峭.然而,这些是我已经熟悉的概念,并且发现自己不得不涉足许多有限的理由来学习任何新的和令人信服的东西.

那么,我所寻找的是什么,我需要学习和了解从一个熟练工WPF'er到熟练工Silverlight'er去咨询.这可以是以下形式:

  • 一般建议
  • 关键差异
  • 经验法则
  • 资源/链接("WPFer的Silverlight指南"将是完美的:)
  • 主要陷阱/需要注意的事项

提前感谢您的任何见解.

Joe*_*ide 9

Rob Eisenberg(CaliburnCaliburn Micro的创建者)有一系列博客文章,讨论如何将WPF应用程序移植到Silverlight.这可能会让您对一些框架差异有所了解.

第1天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/03/25/porting-nhprof-from-wpf-to-silverlight-day-1.aspx

第2天http://devlicio.us/blogs/rob_eisenberg/archive/2010/03/29/porting-nhprof-from-wpf-to-silverlight-day-2.aspx

第3天http://devlicio.us/blogs/rob_eisenberg/archive/2010/03/31/porting-nhprof-from-wpf-to-silverlight-day-3.aspx

第4天http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/01/porting-nhprof-from-wpf-to-silverlight-day-4.aspx

第5天http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-5.aspx

第6天http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-6.aspx

第7天http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-7.aspx

第8天http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-8.aspx

还有一些其他的想法:

  • 绑定默认为单向
  • 没有DynamicResource
  • TabControl是完全不同的
  • 无法为类型定义隐式DataTemplates
  • 依赖属性中没有CoerceValue
  • 事件路由非常基础
  • 没有内置的命令结构.你有ICommand接口,而ButtonBase控件有一个Command属性,虽然没有实现ICommand接口的类.
  • 缺少x:静态,x:类型
  • 所有服务调用都需要位于与UI线程不同的线程上.这基本上要求您学习/实现异步编程策略.看到这里这里.
  • 如前所述,它是一个不同的框架,因此并非所有库都可供您使用.示例:没有XmlDocument - 您必须使用XElement(这可以说是更好,尽管如此)
  • 导航框架与WPF完全不同.远离它.它只会让你痛苦.]
  • 您可以在Silverlight Toolkit中找到的WPF核心框架中的几个控件.下载它,你需要它.
  • 没有内置触发器,但可以使用Blend SDK中提供的行为/操作(实际上它可以提供相同的功能)
  • 如果您需要与数据库进行交互,则必须通过某处托管的服务,或通过COM(这意味着具有提升权限的Silverlight 4 OOB).
  • 我不同意Kevin,因为测试实际上非常简单,所有主要的测试框架和模拟框架都支持Silverlight.您遇到问题的地方是代码覆盖率.Microsoft测试框架支持代码覆盖率(Premium&above),否则您可以使用dotCover.我相信新版本的nCover支持Silverlight,虽然我不是100%肯定.使用StatLight从命令行运行Silverlight测试(无论测试框架如何).
  • 如果您还没有使用IoC容器,请选择一个.Autofac,Ninject,StructureMap,Unity,MEF.(我的另一个偏见;])

我强烈建议查看可用的MVVM框架.这减少了我通常必须编写的框架代码的很大一部分.框架可能只会让你获得你所需要的80%,尽管80%你不需要自己写.我目前偏爱Caliburn Micro,尽管大多数受欢迎的产品都能满足您的需求.

如果我想到更多,我会添加更多.祝你旅途愉快!