从WPF迁移到Silverlight时的主要摩擦点是什么?如何填补功能空白?

时间:2010-07-23 10:52:34

标签: wpf silverlight design-patterns

好的,为了给一点背景知识,我在大约3年前学习了WPF,并且已经合理地了解了自从各种不同版本发生的事情。我在几个项目上查看(并实现了)MVVM,仔细研究了像Prism这样的框架,所以我觉得我对框架的大多数领域非常精通。我还简要介绍了几个小型的Silverlight 2.0项目。

我的问题是,我即将在一家新公司开始Silverlight工作,虽然我很自在能够很好地完成工作,但我觉得我的WPF知识可能会给我带来一些问题。我已经查看了WPF/Silverlight guidance white-paper的codeplex,这是非常好的,但非常有帮助,但它突出了差异,但仍然让我想知道如何解决这些差异。

例如,我知道DataTriggersMultiBindings以及其他一些东西一样缺失DataTrigger。我有兴趣阅读的不是本身的差异,而是你如何得到这些差异或其他模式在Silverlight中有用。如果我需要 {{1}}怎么办?显然我的设计应该考虑到这些因素。

所以,问题是,如果你经历了这种转变,哪些差异会给你造成最大的麻烦,你是如何解决这个问题的?

4 个答案:

答案 0 :(得分:3)

首先,虽然这可以追溯到Silverlight 3,但本白皮书详细介绍了WPF和Silverlight之间的差异:

Microsoft WPF-Silverlight差异白皮书 http://wpfslguidance.codeplex.com/releases/view/30311

这是熟悉差异的第一步。

您可能还想看一下Prism项目。该项目的目标之一是在Silverlight和WPF之间构建一组可互操作的功能,这样您就可以构建针对两个平台并重用大部分代码的企业应用程序。熟悉项目也有助于突出差异:

http://compositewpf.codeplex.com/

最后,虽然Silverlight可能没有数据触发器,但您可以使用行为和触发器等功能组合:

http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx

视觉状态管理器(VSM):

http://timheuer.com/blog/archive/2008/06/04/silverlight-introduces-visual-state-manager-vsm.aspx

完成你需要的大部分工作。

答案 1 :(得分:2)

为我们的WPF应用程序本身提供Silverlight端口,以下是我们遇到的两个“痛点”。

  1. 拆分和分组XAML /模块,以提高性能,并按需使用MEF下载XAP。
  2. 使用相同的WPF / Silverlight代码库实现二进制兼容性的挑战。
  3. 我们的一些功能需要OOB和用户接受。
  4. 我们根据IsolatedStorage优化了一些功能。
  5. 希望这有帮助。

    [现在Silverlight 4.0有一个稳定的版本,我们在过去的几个版本中有一些Visual Studio打嗝,这些版本会自行解决。 (我们坚持使用Silverlight 3.0,并在3月中旬的某个地方跳转到SL 4.0测试版和最终版本)。

    N.B。 :我试图保持抽象的方式,以揭示客户的身份。

答案 2 :(得分:2)

  • 的MarkupExtension
  • IMultiValueConverter
  • Template.Triggers
  • Style.Triggers
  • 绑定RelativeSource = {RelativeSource AncestorType ...
  • Binding.IsAsync
  • {x:静态......
  • {DynamicResource ...
  • Grid.IsSharedSizeScope / SharedSizeGroup

Silverlight不支持所有这些,您必须解决它们。 每个案例都需要自己判断如何“填补空白”

对于触发器部分,唯一的解决方案是使用VisualStateManger。 以下文章提供了一个很好的示例,说明如何从触发器转换到VSM:http://blogs.msdn.com/b/wpfsdk/archive/2009/02/27/the-visualstatemanager-and-triggers.aspx


接下来,OnApplyTemplate以不同的顺序触发,这可能会影响您可能创建的任何自定义控件或用户控件。

<强> WPF:

  1. UserControl构造函数
  2. MyControl构造函数
  3. MyControl.OnApplyTemplate
  4. UserControl已加载
  5. MyControl已加载
  6. <强> Silverlight的:

    1. UserControl构造函数
    2. MyControl构造函数
    3. MyControl已加载
    4. UserControl已加载
    5. MyControl.OnApplyTemplate
    6. 当然,微软有一篇关于它的文章,称为“WPF兼容性”,并对WPF和Silverlight之间的差异和变化进行了更全面的概述:

      http://msdn.microsoft.com/en-us/library/cc903925(VS.95).aspx

      希望这有帮助

答案 3 :(得分:0)

Silverlight强迫您对设计模式进行一些更改,如果在整个软件中普遍存在,则可能会使代码重用变得毫无意义。

例如,缺少数据模板选择器 - 我发现这非常震惊。