Silverlight和WPF的兼容性问题

8

我们计划开发一款既可以在Silverlight中开发,也可以在WPF中开发的应用程序。

我想知道,由于我们将在XAML中实现接口,它是否在两种技术中都兼容?

在从一种技术迁移到另一种技术时,我们应该预期哪些问题?


2
重复问题:http://stackoverflow.com/questions/3626936/silverlight-4-and-wpf-compatibility 和 https://dev59.com/v0bRa4cB1Zd3GeqP3LkI - Samvel Siradeghyan
1
请只返回翻译文本:另外,重复的问题,请到https://dev59.com/TXNA5IYBdhLWcg3wfN2O。 - SergioL
2个回答

2
我开发了一个双重目标的Silverlight / WPF应用程序。它不像简单地将一个应用程序移植到另一个那么简单...
你应该首先查看文档,了解wpf和silverlight之间的差异,更好地理解你所面临的问题,例如XAML Processing Differences Between Silverlight and WPF。但你不能停止于此。要理解基于不同应用环境的设计模式。现在你开始了解你所处理的内容。
当为wpf和silverlight构建UI时,必须非常谨慎地处理控件和命名空间。共享UI代码可能极其繁琐,通常更容易创建两个使用共享模板的独立UI层。您在富客户端应用程序中拥有的大多数UI功能与您在silverlight应用程序中的功能将有所不同。您可能会在wpf应用程序中提供更丰富的数据密集型视图,而在silverlight应用程序中提供更简洁的视图。最终,您可能能够实现相同的目标,但这将比仅重新定位和部署要难得多。
如果您是从头开始构建应用程序,则建议同时构建wpf应用程序和silverlight应用程序。通过这样做,您将会发现在不同环境中使用的服务层和数据访问策略的抽象机会。Silverlight可能需要通过Web服务访问数据,而wpf应用程序可能会与本地数据库实例对话。这可以很容易地完成。使用IoC容器注入适当的服务实现。这个领域提供了最多代码重用的机会。您可以创建所有视图逻辑和服务逻辑以在两个UI之间共享。您还可以创建共享的业务逻辑和数据访问逻辑。
如果您的富客户端应用程序中没有本地数据存储,则请忽略下一段。
如果您计划拥有偶尔离线的客户端(wpf应用程序),那么您可能需要制定某种同步策略和架构。根据数据结构的复杂程度,这可能相当困难。使用可用框架构建复杂的同步逻辑是一个大问题。您可能需要自己构建,或接受其他限制。
一条建议:从测试开始,到测试结束。

0

最终,Silverlight 只是 WPF 实体的一个子集,因此在移植到 Silverlight 时可能会发现某些可用元素在 WPF 中不存在,这些元素包括:

  • Silverlight 中缺少某些绑定支持。
  • 在 WPF 中有更精细的方式调整依赖属性,而在 Silverlight 中则不存在。
  • 使用 Silverlight 触发代码的 Storyboards,而不是 WPF 的 Triggers
  • WPF 和 Silverlight 使用不同的核心库,这可能意味着无法在 WPF/Silverlight 应用之间共享库。
  • 与 WPF 相比,在 Silverlight 中内置的控件较少。

诸如此类。

我猜你最大的问题可能是将自定义控件移植,这与其他代码类似,可以很大程度上转移,但在标记和后台代码之间会有许多明显的警告。你可能需要调整大多数WPF控件以在Silverlight中编译,修改模板、资源等的TargetType值,并用另一个控件替换一个控件(有时需要创建自己的控件以实现目标,例如缺失Silverlight中的UniformGrid)。

我想发链接,但其他人似乎已经披露了你需要知道的一切。玩得开心。


故事板可以通过两个框架中的视觉状态转换启动。如果您的目标是WPF和Silverlight,那么这不是做法吗? - Justice
你可能是对的;我只是回忆过去的经验,其中归结为我不得不手动调用Storyboard.Begin - 我没有遇到你提出的另一种替代方法。 - Grant Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接