代码之家  ›  专栏  ›  技术社区  ›  Phil Sandler

从WPF转移到Silverlight:主要的区别是什么?

  •  11
  • Phil Sandler  · 技术社区  · 15 年前

    我使用WPF完成了一个完整的项目,并且(至少)很好地掌握了主要概念,比如XAML、数据绑定和MVVM。我们一切都是“手工”完成的——我们没有使用MVVM框架或第三方工具。所有的XAML也是手写的(没有混合)。

    所以我要找的是关于我需要学习和理解的建议,从一个熟练工人到一个熟练工人。其形式可以是:

    • 一般建议
    • 主要区别
    • 经验法则
    • “Silverlight”将是完美的:)
    • 重大隐患/注意事项

    2 回复  |  直到 15 年前
        1
  •  9
  •   Joe McBride    15 年前

    Rob Eisenberg(创造者 Caliburn Caliburn Micro )有一系列关于将WPF应用程序移植到Silverlight的博客文章。这可能会让您深入了解一些框架差异。

    第一天 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

    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

    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

    我脑子里还有一些想法:

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

    如果我想更多的话,我会加更多的。祝你旅途好运!

        2
  •  2
  •   Kevin Nelson    15 年前

    我真的只为一个真正的应用程序做过Silverlight……但是我的一个同事是个WPF的大家伙,所以我听到了他的一些抱怨。

    • 您可能需要使用WCF服务等来异步查询服务/业务层
    • 对视图模型进行单元测试并不是那么容易。需要Moq您的服务并使用Silverlight单元测试项目。
    • 我想我们的WPF用户抱怨不能像在WPF中那样轻松地绑定CanExecute方法之类的东西。他必须直接从命令或其他东西调用方法。(到目前为止,我只是有机会了解一下MVVM,因为我现在正在进行一个不同的项目:(,所以对那个项目不太确定)。