在Silverlight和WinRT应用程序之间共享代码

问题描述:

我正在创建一个Silverlight应用程序,该应用程序将在浏览器中运行,并使用ComponentArt提供的一些数据可视化内容。在某些时候,我还想创建一个WinRT xaml/c#版本,以便它可以作为Windows应用的所有版本的Windows 8运行,包括WindowsRT。在Silverlight和WinRT应用程序之间共享代码

我的问题是我该如何解决这个问题,以在两个版本之间获得最大代码重用。除了有两个版本之外,我看不出有其他方法(因为我使用了组件,并且不能使用html/js方法)。特别是Silverlight应用程序中使用的xaml会如何移植到windows store应用程序?

您的XAML与您使用的功能一样便携。你不能重复使用相同的XAML文件,因为它们使用不同的命名空间和xmlns URI方案,而且你很可能希望使UI稍有不同,因为Silverlight主要是鼠标+键盘UI,而WinRT/XAML主要是触摸。

请确保您使用MVVM能够重用很多非XAML代码。在选择使用哪些控件时 - 确保它们在WinRT/XAML中可用或有很好的选择。我看到的一些丢失的东西是WriteableBitmap.Render()方法,RadialGradientBrush,TypeConverterAttribute,Style/Setter绑定,TreeView,DataGridGridSplitter对照。虽然有许多缺失控件的开源版本 - 但您很可能希望为Windows应用商店应用使用其他UI设计方法,因为这些方法不适用于触摸。

仅供参考 - 我花了大约2-3个小时的移植从Silverlight工具包到的WinRT的TreeView控制,各地尽可能多的Calendar控制和20-30小时,以港口Chart控制其多种数据点和系列 - 这是马哈茂德穆萨原来的港口之上。根据您使用的功能的复杂程度 - 所需的工作量显然会增加。如果你只是使用Buttons, TextBoxes, TextBlocks, RadioButtons, CheckBoxes等 - 你大多可以复制&粘贴到端口的XAML。我还会避免重新设计控件,因为模板部件和可视状态/可视状态组在这些平台之间略有不同,因此您需要重做工作或花时间更正模板。