8

在 WinRT 和 WP8 之间共享代码时:

WP8 想要:

xmlns:vm="clr-namespace:MyApp.ViewModels" 

WinRT 想要:

xmlns:vm="using:MyApp.ViewModels" 

这意味着您不能像在 WP7、Silverlight、WPF 中那样在项目之间共享 XAML 代码(如用户控件)

有没有人找到解决方法?XmlnsDefinition属性看起来可能会解决此问题,但 MS 将其从 WinRT 中取出。

4

2 回答 2

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 Phone 8 中,导入的命名空间以 clr-namespace: 为前缀。在 Windows 8 中,导入的命名空间以 using: 为前缀。这使得使用相同的 XAML 变得很困难,除非您可以使用相同的语法导入命名空间。
  • XAML 不支持条件编译。如使用预处理器指令的条件编译中所示,条件编译是一种处理平台差异的有用技术,方法是在针对特定平台的代码路径中进行编译,在针对另一个平台进行编译时在另一个代码路径中进行编译。这使得在两个平台之间共享 XAML 页面变得很困难,因为您无法通过简单地在命名空间导入中进行有条件地编译来解决前面的问题,这些命名空间导入使用 clr-namespace 用于 Windows Phone 8 并使用:用于 Windows 8。

这不应被视为在 Windows Phone 8 和 Windows 8 之间共享的完整障碍。明确的指导是为每个平台单独设计和构建 UI,并接受每个平台的设计指南。技术上可以绕过这些障碍。您可以在页面初始化期间从代码创建您的 UI。您可以在运行时从资源中加载特定于平台的 XAML,并将其作为字符串注入页面。然而,这些技术都没有规模化,它们使构建您的核心资产(您的应用程序在用户眼中的外观)成为一项乏味且容易出错的任务。通过尝试共享应用程序逻辑、数据模型、视图模型等,您的代码共享投资将在您的应用程序堆栈中为您提供更大的回报。

[...] 在某些情况下可以使用的一种共享 UI 的技术是将 UI 的某些部分隔离到用户控件中并尝试共享它们。[...] 但是,由于本讨论开始时提到的限制,该技术仅限于基本的用户控件。除了这些限制之外,您还应该考虑始终构建适合目标平台的用户体验的指南。共享 XAML 控件是可能的,但受到限制。这种共享的一个很好的候选者是您想要在弹出窗口中显示的 UI 或您想要共享的其他小部件,因为它们通常由基本的 UI 元素组成,没有复杂的 XAML 和简单的样式。

于 2014-02-26T00:15:36.900 回答
0

我只是在 Windows Phone 8 中做了一点,尽管编辑器默认将其转换为clr-namespace您仍然可以将其更改为using并且它会工作。

于 2013-05-06T21:13:52.733 回答