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

vmjh9lq9  于 2023-04-22  发布在  其他
关注(0)|答案(4)|浏览(121)

已关闭,该问题为opinion-based,目前不接受回答。
**想改进这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。

8年前关闭。
Improve this question
好的,为了给予一点背景知识,我大约在3年前学习了WPF,并且一直在合理地了解各种不同版本中发生的事情。我在几个项目中研究(并实现)了MVVM,很好地研究了Prism等框架,所以我认为我对框架的大部分领域都很精通。我也在几个小型Silverlight 2.0项目中工作过。
我的问题是,我即将在一家新公司开始一份Silverlight工作,虽然我很舒服,我可以做好这份工作,但我觉得我的WPF知识可能会给我带来一些问题。我已经在codeplex上复习了WPF/Silverlight guidance white-paper,它非常出色,非常有用,但尽管它突出了差异,但仍然让我想知道如何绕过这些差异。
例如,我知道DataTriggersMultiBindings以及一整组其他东西都不见了。我感兴趣的不是阅读它们本身的差异,而是你如何解决这些差异,或者在Silverlight中还有什么其他有用的模式。如果我需要一个DataTrigger怎么办?显然我的设计应该考虑到这些事情。
所以,问题是,..如果你经历了这个转变,什么差异给你带来了最大的麻烦,你是如何解决的?

ffx8fchx

ffx8fchx1#

首先,虽然这是从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
Visual State Manager(VSM):
http://timheuer.com/blog/archive/2008/06/04/silverlight-introduces-visual-state-manager-vsm.aspx
完成你需要的大部分事情。

xjreopfe

xjreopfe2#

为我们的WPF应用程序提供Silverlight端口本身,以下是我们遇到的两个“痛”点。
1.拆分和分组XAML/模块以提高性能,并使用MEF按需下载XAP。
1.在WPF/Silverlight中使用相同的代码库实现二进制兼容性的挑战。
1.我们的一些功能需要OOB和用户接受。
1.我们依靠IsolatedStorage优化了一些功能。
希望这能帮上忙。
[现在Silverlight 4.0已经有了一个稳定的版本,我们在过去的几个版本中遇到了一些Visual Studio的问题,这些问题随着时间的推移而解决了。(我们坚持使用Silverlight 3.0,并在三月中旬跳到SL 4.0 beta和最终版本)]。
注:我尽量保持抽象的方式,不透露客户的身份。

ivqmmu1c

ivqmmu1c3#

  • 标记扩展
  • IMultiValueConverter
  • Template.Triggers
  • Style.Triggers
  • 绑定RelativeSource={RelativeSource AncestorType…
  • Binding.IsAsync
  • {x:静态...
  • {动态资源...
  • Grid.IsSharedSizeScope / SharedSizeGroup

所有这些在Silverlight中都不支持,你必须解决它们。每种情况都需要它自己判断如何“填补空白”
对于触发器部分,唯一的解决方案是使用VisualStateManger。下面的文章给出了一个很好的例子,说明如何从触发器过渡到VSM:http://blogs.msdn.com/b/wpfsdk/archive/2009/02/27/the-visualstatemanager-and-triggers.aspx
接下来,OnApplyTemplate以不同的顺序触发,这可能会影响您可能创建的任何自定义控件或UserControl。

WPF:

  1. UserControl构造函数
  2. MyControl构造函数
    1.MyControl.OnApplyTemplate
    1.已加载UserControl
  3. MyControl已加载

Silverlight:

  1. UserControl构造函数
  2. MyControl构造函数
  3. MyControl已加载
    1.已加载UserControl
    1.MyControl.OnApplyTemplate
    当然,微软有一篇关于这方面的文章,叫做“WPF兼容性”,并给出了关于WPF和Silverlight之间的差异和变化的更全面的概述:
    http://msdn.microsoft.com/en-us/library/cc903925(VS.95).aspx
    希望这对你有帮助
mwngjboj

mwngjboj4#

Silverlight迫使您对设计模式进行一些更改,如果这些更改在整个软件中普遍存在,则可能会使代码重用变得毫无意义。
例如,数据模板选择器丢失了--我发现这是一个相当令人震惊的问题。

相关问题