引用UWP类库中的资源字典 [英] Reference ResourceDictionary in UWP Class Library

查看:76
本文介绍了引用UWP类库中的资源字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

{Windows.UI.Xaml.Markup.XamlParseException:Cannot从‘ms-resource:///Files/StylesButtonStyle.xaml’.

定位资源

在App.xaml中我们有

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="StylesCustom.xaml" />
    <ResourceDictionary Source="StylesButtonStyle.xaml"/>
    <ResourceDictionary Source="StylesListsStyle.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:无法为属性‘Windows.UI.Xaml.ResourceDictionary.Source’赋值,因为无法将类型‘Windows.Foundation.String’赋值给类型...

我们还在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://应用程序:、/LibraryName;component/Styles/Custom.xaml’

中找到资源

如何在UWP类库中引用资源字典?

推荐答案

正如@justin所指出的,这里的问题是您忘记在URI中添加类库名称。让我们假设您的解决方案中有一个名为"ClassLibrary1"的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>

也不要忘记将"ClassLibrary1"添加到主项目的引用中

此外,如果您的类库不在同一解决方案中,则需要在类库的"属性"页的生成配置中选中"生成库布局"选项。

因为在WinRT环境中,资源不再嵌入到程序集中,而是作为内容放置在DLL旁边。因此,我们需要生成库布局,以便在其他项目中方便地引用该DLL。详情请参考my previous answer

这篇关于引用UWP类库中的资源字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆