2010-05-20 24 views
10

我想在外部DLL中创建一个名为DataTemplate.xaml的ResourceFile,并在WP7页面中使用它。当我做我的页面的标题之后,我得到一个错误在WindowsPhone 7应用程序中使用外部ResourceDictionary

<ResourceDictionary Source="pack://application:,,,/WP7SharedClassLibrary;component/DataTemplate.xaml" />

的错误是 “当前项目不支持‘应用’作为包URI的授权组成部分。”

有没有人遇到过这个并解决了这个问题?

回答

1

我在尝试共享XAML ResourceDictionary文件时尝试了包语法,并且得到了相同的错误消息。我结束了使用这种语法,它为我工作。

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/MyDLLName;component/Folder/MyXAMLFile.xaml"/>     
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
+0

不适用于我。给出“属性/WP_Utilities;component/Resources/PerformanceProgressBar.xaml值超出范围[Line:17 Position:37] --- Inner Exception --- KeyNotFoundException”运行时出错。什么是MyXAMLFile.xaml文件的构建类型? – 2011-01-23 00:06:57

0

Silverlight不支持包URI。这是一个WPF功能。

如果您在Silverlight中检查Image对象的Source属性的类型,它是Uri。但在WPF来源是依赖属性与类型的ImageSource.

13

我已经成功地得到这个使用以下步骤工作:

  1. 创建使用“Windows Phone应用程序”标准的WP7应用名为“WP7ExternalResourcesTest”的应用程序模板。
  2. 使用名为“WP7ExternalResourcesTestLibrary”的“Windows Phone类库”模板将项目添加到相同的解决方案。
  3. 从库项目中删除默认的Class.cs文件。
  4. 使用“XML文件”模板添加名为“External.xaml”的文件,并将“构建操作”设置为“页面”。
  5. 添加以下XAML到新的XAML文件:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
        <SolidColorBrush x:Key="ForegroundBrush" Color="Red" /> 
    </ResourceDictionary> 
    
  6. 建库项目,然后加入从WP7ExternalResourcesTest项目对它的引用。
  7. 在WP7ExternalResourcesTest,打开App.xaml中,改变了Application.Resources部分如下:

    <Application.Resources> 
        <ResourceDictionary> 
         <ResourceDictionary.MergedDictionaries> 
          <ResourceDictionary Source="/WP7ExternalResourcesTestLibrary;component/External.xaml" /> 
         </ResourceDictionary.MergedDictionaries> 
        </ResourceDictionary> 
    </Application.Resources> 
    
  8. 在MainPage.xaml中,加入Foreground="{StaticResource ForegroundBrush}"到名为 “的PageTitle” 的TextBlock
  9. 在仿真器中运行应用程序。最终结果是TextBlock以红色正确显示了“页面名称”字样。

希望这会有所帮助。

+0

Doh!看起来我忘了第6步:-(在我的情况下,我不仅需要引用外部项目,还需要引用外部项目所基于的另一个项目的WP_Utilities.DLL。感谢您的详细介绍! – 2011-01-26 22:22:42

+0

此外,我刚刚发现,WP8不喜欢在引用的程序集名称中有句号。如果您无法正常工作,那可能是您的问题。 – moswald 2013-06-20 01:51:45

+0

所以你真的需要把ResourceDictionary放在一个单独的程序集中吗? – 2014-11-11 07:17:15

相关问题