wpf - 从 WPF 迁移到 Silverlight : What are the Key Differences?

标签 wpf silverlight mvvm silverlight-4.0

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

我将在几周后开始的新项目是相当繁重的 Silverlight,我希望尽快上手。然而,我读过的大多数关于 SL 入门的文章都集中在 XAML 和数据绑定(bind)上。由于我对这些概念的介绍仍然内存犹新,所以我当然可以理解为什么这些教程会在这些主题上花费大量时间 - 学习曲线可能非常陡峭。然而,这些都是我已经熟悉的概念,并且发现自己必须涉足大量的领域才能学习任何新的和引人注目的东西。

因此,我正在寻找有关我需要学习和理解什么才能从 WPF 熟练工转变为 Silverlight 熟练工的建议。这可以采用以下形式:

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

预先感谢您的任何见解。

最佳答案

Rob Eisenberg(CaliburnCaliburn 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

第 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

我的一些其他想法:

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

我强烈建议研究可用的 MVVM 框架。这减少了我通常需要编写的框架代码的很大一部分。这些框架可能只能满足您所需的 80%,尽管这 80% 不需要您自己编写。我目前偏爱 Caliburn Micro,尽管大多数流行的产品都能满足您的需要。

如果想到更多我会补充。祝您旅途顺利!

关于wpf - 从 WPF 迁移到 Silverlight : What are the Key Differences?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106591/

相关文章:

wpf - MVVM Controller

wpf - 无法在 WPF 中将 ListBoxItem Adorner 拖到 ListBox 之外 -ScrollViewerProblem

c# - DataContext 在哪里?

c# - 两种方式绑定(bind)到用户控件中的依赖属性并调用方法

wpf - 状态栏不总是更新

c# - 如何在数据绑定(bind)项控件中获取项目的下一个兄弟项?

c# - 使用参数在 MVVM Light 中打开新窗口的最佳实践

silverlight - 如何使用 Microsoft.Build.BuildEngine 构建 Silverlight 项目?

c# - 调试 NavigationService.GoBack() 问题的最佳方法?

c# - 如何将 double[] 转换为 System.Windows.Media.DoubleCollection?