在UWP类库中引用ResourceDictionary

时间:2017-06-12 22:35:35

标签: xaml uwp uwp-xaml

我们有一个使用模板10的UWP应用程序。资源位于同一解决方案中的UWP类库中。当我们运行应用程序时,我们会收到错误

  

{Windows.UI.Xaml.Markup.XamlParseException:找不到'ms-resource:/// Files / Styles \ ButtonStyle.xaml'中的资源。

在App.xaml中我们有

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Styles\Custom.xaml" />
    <ResourceDictionary Source="Styles\ButtonStyle.xaml"/>
    <ResourceDictionary Source="Styles\ListsStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>

我们遵循了

中的指导

Windows 10 Universal Merged Dictionaries

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="ms-appx:///Styles/Custom.xaml" />
    <ResourceDictionary Source="ms-appx:///Styles/ButtonStyle.xaml"/>
    <ResourceDictionary Source="ms-appx:///Styles/ListsStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>

然后错误是

  

{Windows.UI.Xaml.Markup.XamlParseException:无法分配给属性&#39; Windows.UI.Xaml.ResourceDictionary.Source&#39;因为类型&#39; Windows.Foundation.String&#39;无法分配到类型...

我们也尝试了ResourceDictionary in separate library

中的解决方案
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/LibraryName;component/Styles/Custom.xaml" />
    <ResourceDictionary Source="pack://application:,,,/LibraryName;component/Styles/ButtonStyle.xaml"/>
    <ResourceDictionary Source="pack://application:,,,/LibraryName;component/Styles/ListsStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>

然后错误是

  

{Windows.UI.Xaml.Markup.XamlParseException:找不到来自pack:// application:,,, / LibraryName; component / Styles / Custom.xaml'的资源

我们如何在UWP类库中引用ResourceDictionary?

1 个答案:

答案 0 :(得分:4)

正如@Justin指出的那样,问题在于您忘记在URI中添加类库名称。让我们假设您有一个名为&#34; ClassLibrary1&#34;的UWP类库。在你的解决方案然后你可以将它们合并为:

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ClassLibrary1/Styles/Custom.xaml" />
        <ResourceDictionary Source="ClassLibrary1/Styles/ButtonStyle.xaml"/>
        <ResourceDictionary Source="ClassLibrary1/Styles/ListsStyle.xaml"/>
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

或者

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ms-appx:///ClassLibrary1/Styles/Custom.xaml" />
        <ResourceDictionary Source="ms-appx:///ClassLibrary1/Styles/ButtonStyle.xaml"/>
        <ResourceDictionary Source="ms-appx:///ClassLibrary1/Styles/ListsStyle.xaml"/>
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

也不要忘记添加&#34; ClassLibrary1&#34;进入您的主项目参考文献

此外,如果您的类库不在同一个解决方案中,那么您需要检查构建&#34;生成库布局&#34; 选项>在类库的属性页面下进行配置

因为在WinRT环境中,资源不再嵌入到程序集中,而是作为内容放在dll旁边。所以我们需要生成库布局,以便我们可以方便地在其他项目中引用dll。有关详细信息,请参阅my previous answer