想知道是否有人知道如何处理这个问题。
在WP7.1中,我们可以利用优秀的Windows Phone Toolkit包括一些有用的控件,例如 LongListSelector 和 Panorama。这些是 Microsoft.Phone.Controls.Toolkit
程序集的一部分。
在 WP8 中,我们不需要这两个控件的工具包,因为它们是官方 Microsoft.Phone.Controls
程序集的一部分。
我的应用程序是多目标的,所以我有两个手机项目,WP71 和 WP80,我将 WP80 中的文件链接到 WP71 中的文件。
这很好用直到我尝试在 XAML 页面中使用 Panorama 或 LongListSelector 控件。在 WP80 项目中,如果我引用电话工具包的 WP80 DLL,它不包括上述两个控件,因为令人惊讶的是,它们已经存在。
问题是,WP71 需要 XAML 顶部的命名空间声明,并且两个项目的命名空间不同。
WP71:
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
<toolkit:Panorama />
WP80:
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
<phone:Panorama />
我无法构建项目,因为如果我只使用一个项目,每个项目都认为命名空间不正确,因为它们需要指向不同的程序集。
我不认为我可以在我的 XAML 中使用编译常量,否则这将是一个修复。
我的解决方法最初是在我的 WP80 项目中引用旧的 WP71 DLL。但是其他第 3 方库与官方 8.0 SDK DLL(在我的例子中是 Caliburn)绑定(bind),因此会导致问题。
我该如何解决这个问题?我脑海中唯一的想法是求助于代码隐藏来创建控件的实例:(有更好的方法吗?
最佳答案
不要使用链接,为每个链接创建一个单独的 View 。
另一种解决方案可能是在每个相关项目中创建一个 PanoramaEx
控件并继承自 Panorama
。然后 View 将引用 PanoramaEx
控件,您仍然可以使用指向单个 View 的链接。也就是说,如果两个 UI 项目具有相同的命名空间。
编辑:命名空间中的 WP7 不是全景图:
xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"
我确实使用 ProgressBar 和 PerformanceProgressBar 的初始解决方案,我在每个 UI 项目中都有一个 ProgressBarEx
,WP7 继承自 ProgressBar
,WP8 继承自 PerformanceProgressBar
然后在 View 中我引用 ProgressBarEx
。
关于windows-phone-7 - 带有 Windows Phone 工具包的多目标 WP7.1/WP8 应用程序 (Panorama/LongListSelector),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857571/