XAML clr-namespace - 使用不兼容性?

时间:2013-05-06 19:43:49

标签: silverlight windows-phone-7 xaml windows-runtime windows-phone-8

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

WP8希望:

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

WinRT希望:

xmlns:vm="using:MyApp.ViewModels" 

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

有没有人找到合作方式? XmlnsDefinition属性看起来可能会解决这个问题,但MS将其从WinRT中删除。

2 个答案:

答案 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并且它可以正常工作。