【问题标题】:Sharing code between a silverlight and WinRT application在 silverlight 和 WinRT 应用程序之间共享代码
【发布时间】:2013-03-06 15:33:03
【问题描述】:
我正在创建一个将在浏览器中运行并使用 ComponentArt 提供的一些数据可视化工具的 silverlight 应用程序。在某些时候,我还想创建一个 WinRT xaml/c# 版本,以便它可以作为 Windows 商店应用程序运行所有版本的 Windows 8,包括 WindowsRT。
我的问题是我如何才能在两个版本之间获得最大的代码重用。除了拥有 2 个版本之外,我没有其他办法(因为我使用 componentart 并且不能使用 html/js 方法)。特别是 Silverlight 应用程序中使用的 xaml 对 Windows 商店应用程序的可移植性如何?
【问题讨论】:
标签:
windows
silverlight
microsoft-metro
windows-runtime
windows-store-apps
【解决方案1】:
您的 XAML 与您使用的功能一样可移植。您不能重复使用相同的 XAML 文件,因为它们使用不同的命名空间和 xmlns URI 方案,而且您很可能希望 UI 稍有不同,因为 Silverlight 主要是鼠标+键盘 UI,而 WinRT/XAML 主要是触摸。
确保您使用 MVVM 能够重用大量非 XAML 代码。选择要使用的控件时 - 确保它们在 WinRT/XAML 中可用或有很好的替代品。我看到的一些缺失的东西是WriteableBitmap.Render() 方法、RadialGradientBrush、TypeConverterAttribute、Style/Setter 绑定、TreeView、DataGrid 或GridSplitter 控件。尽管有很多缺失控件的开源版本 - 您很可能希望为 Windows 应用商店应用使用替代 UI 设计方法,因为这些方法不适用于触控。
作为参考 - 我花了大约 2-3 小时将 TreeView 控件从 Silverlight Toolkit 移植到 WinRT,大约与 Calendar 控件一样多,并花了 20-30 小时将 Chart 控件移植到多种类型数据点和系列 - 这是在 Mahmoud Moussa 的原始端口之上。根据您使用的功能的复杂性 - 所需的工作量显然会增加。如果您只使用Buttons, TextBoxes, TextBlocks, RadioButtons, CheckBoxes 等 - 您主要可以复制和粘贴来移植 XAML。我还会避免重新模板化控件,因为这些平台之间的模板部分和视觉状态/视觉状态组略有不同,因此您需要重做工作或花时间更正模板。