在Windows Phone 7应用程序中使用外部资源字典

时间:2010-05-20 15:30:44

标签: windows-phone-7

我正在尝试在外部dll中创建一个名为DataTemplate.xaml的ResourceFile,并在WP7页面中使用它。当我在页面的标题中执行以下操作时出现错误

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

错误是 “当前项目不支持'application'作为包URI的权限组件。”

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

3 个答案:

答案 0 :(得分:13)

我已设法使用以下步骤使其工作:

  1. 使用名为“WP7ExternalResourcesTest”的“Windows Phone应用程序”应用程序模板创建标准WP7应用程序。
  2. 使用名为“WP7ExternalResourcesTestLibrary”的“Windows Phone类库”模板向同一解决方案添加了一个项目。
  3. 从库项目中删除了默认的Class.cs文件。
  4. 使用“XML文件”模板添加了一个名为“External.xaml”的文件,并将“Build Action”设置为“Page”。
  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以红色正确显示了“页面名称”字样。
  10. 希望这有帮助。

答案 1 :(得分:1)

我在尝试共享XAML ResourceDictionary文件时尝试了包语法并得到了相同的错误消息。我最终使用了这种语法,它对我有用。

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

答案 2 :(得分:0)

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

如果在Silverlight中检查Source对象的Image属性的类型,则为Uri。但是在WPF中,source是一个类型为ImageSource.

的依赖项属性