在WinRT和WP8之间共享代码时:
WP8希望:
xmlns:vm="clr-namespace:MyApp.ViewModels"
WinRT希望:
xmlns:vm="using:MyApp.ViewModels"
这意味着您不能像WP7,Silverlight,WPF那样在项目之间共享XAML代码(如用户控件)
有没有人找到合作方式? XmlnsDefinition
属性看起来可能会解决这个问题,但MS将其从WinRT中删除。
答案 0 :(得分:1)
此问题以及有限的解决方法在此处详细说明:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj714088(v=vs.105).aspx
- Windows Phone 8上的XAML和Windows 8上的XAML不是二进制兼容的。如前所述,您用于构建UI的控件 在每个平台上都是类似的。它们的名称,行为和类似 他们公开的编程接口或语法。但是,他们是 专门为每个平台实施。
- Windows Phone 8的XAML和Windows 8的XAML的命名空间前缀不同。通过查看命名空间来说明 从头开始创建时包含在基本页面中。 [...] 比较这些命名空间导入,你可以看到微妙的但是 命名空间的导入方式存在显着差异。在Windows中 电话8,导入的命名空间以clr-namespace:为前缀。在 Windows 8导入的命名空间以使用:为前缀。这样做 很难使用相同的XAML,除非您可以使用导入名称空间 相同的语法。
- XAML不支持条件编译。如 在使用预处理程序指令的条件编译中显示, 条件编译是处理平台的有用技术 通过在针对特定目标的代码路径中进行编译来实现差异 平台,以及编译另一个平台时的另一个代码路径。 这使得在两个平台之间共享XAML页面变得困难, 因为你不能简单地有条件地解决上一个问题 编译在使用clr-namespace for Windows的命名空间导入中 电话8并使用:用于Windows 8。
这不应被视为两者之间共享的完整障碍 Windows Phone 8和Windows 8.明确的指导是设计和 拥抱设计,为每个平台单独构建UI 每个指南。在技术上可以绕过这些 障碍。您可以在页面初始化期间创建UI 码。您可以在运行时从资源加载特定于平台的XAML 并将其作为字符串注入页面。但是,这些都不是 技术规模和他们构建您的核心资产 - 如何 您的应用程序看向您的用户 - 一项繁琐且容易出错的任务。你的代码 分享投资将为您带来更大的回报 您的应用堆栈,尝试共享应用逻辑,数据模型,视图模型, 等
[...]一种在某些情况下可以使用的共享UI的技术 是将UI的一部分隔离到用户控件中并尝试共享 那些。 [...]但是,由于受到限制 在本讨论开始时,该技术仅限于基本用户 控制。除了这些限制,你应该考虑 始终建立适合目标的用户体验的指南 平台。共享XAML控件是可能但有限的。一个好的 这种共享的候选者是你想要显示的UI 弹出窗口或您想要共享的其他小部件,因为它们 通常由基本的UI元素组成,没有复杂的XAML 并且具有简单的造型。
答案 1 :(得分:0)
我刚刚在Windows Phone 8中做了一点,虽然编辑器确实将其转换为clr-namespace
,但您仍然可以将其更改为using
并且它可以正常工作。