在WindowsPhone 7应用中使用外部ResourceDictionary

10

我想在一个外部的dll中创建一个名为DataTemplate.xaml的资源文件,并在WP7页面中使用它。当我在页面的头部执行以下操作时,会出现错误:

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

错误信息如下:"当前项目不支持“应用程序”作为打包URI的组件。"

是否有其他人遇到过这个问题并解决了?

3个回答

13

我已经通过以下步骤成功地实现了这个:

  1. 使用“Windows Phone应用程序”应用程序模板创建了一个名为“WP7ExternalResourcesTest”的标准WP7应用程序。
  2. 向同一解决方案中添加了一个项目,使用“Windows Phone类库”模板,名为“WP7ExternalResourcesTestLibrary”。
  3. 从库项目中删除了默认的Class.cs文件。
  4. 添加了一个名为“External.xaml”的文件,使用“XML文件”模板,并将“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并将部分更改为以下内容:

  8. <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/WP7ExternalResourcesTestLibrary;component/External.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    
  9. 在 MainPage.xaml 中,在名为“PageTitle”的 TextBlock 中添加了 Foreground="{StaticResource ForegroundBrush}"
  10. 在模拟器中运行应用程序。最终结果是,TextBlock 正确显示为红色的“page name”单词。

希望这可以帮助你。


糟糕!看起来我忘记了第6步 :-( 在我的情况下,我不仅需要引用外部项目,还需要从另一个基于该外部项目的项目中引用WP_Utilities.DLL。感谢详细的编写! - Greg Bray
此外,我刚刚发现WP8不喜欢在引用程序集名称中使用句号。如果你遇到了问题,那可能就是原因所在。 - moswald
那么您真的需要将ResourceDictionary放在单独的程序集中吗? - George Birbilis

1

我在尝试共享XAML ResourceDictionary文件时使用了pack语法,但收到了相同的错误信息。最终我使用了这个语法,并且它对我起作用了。

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

对我不起作用。在运行时给出“属性/WP_Utilities;component/Resources/PerformanceProgressBar.xaml的值超出范围。[行:17 位置:37] --- 内部异常 --- KeyNotFoundException”错误。你的MyXAMLFile.xaml文件的构建类型是什么? - Greg Bray

0

Silverlight不支持打包URI,这是WPF的功能。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接