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

时间:2013-03-06 15:33:04

标签: windows silverlight microsoft-metro windows-runtime windows-store-apps

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

我的问题是如何解决这个问题,以便在两个版本之间获得最大的代码重用率。除了有两个版本之外我没有别的办法(因为我与使用componentart并不能使用html / js方法)。特别是在silverlight应用程序中使用的xaml对于windows商店应用程序有多便携?

1 个答案:

答案 0 :(得分:2)

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

确保使用MVVM能够重用许多非XAML代码。选择要使用的控件时 - 确保它们在WinRT / XAML中可用或具有良好的替代品。我看到的一些遗漏的内容是WriteableBitmap.Render()方法,RadialGradientBrushTypeConverterAttributeStyle / Setter绑定,TreeView,{{1} }或DataGrid控件。虽然有许多缺少控件的开源版本 - 您很可能希望为Windows应用商店应用使用其他UI设计方法,因为这些方法在触摸时效果不佳。

供参考 - 我花了大约2-3个小时将GridSplitter控件从Silverlight Toolkit移植到WinRT,大约对TreeView控件移植,20-30小时移植Calendar控制它的各种数据点和系列 - 这是Mahmoud Moussa在原始端口之上。根据您使用的功能的复杂程度 - 所需的工作量显然会增加。如果你只是使用Chart等 - 你可以大部分复制和粘贴来移植XAML。我也会避免重新设置控件,因为这些平台之间的模板部件和可视状态/可视状态组略有不同,因此您需要重做工作或花时间修改模板。