UWP类库中的参考ResourceDictionary

Vag*_*gue 2 xaml uwp uwp-xaml

我们有一个使用Template 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>
Run Code Online (Sandbox Code Playgroud)

我们遵循了

Windows 10通用合并字典

<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>
Run Code Online (Sandbox Code Playgroud)

那么错误是

{Windows.UI.Xaml.Markup.XamlParseException:无法分配给属性“ Windows.UI.Xaml.ResourceDictionary.Source”,因为无法将类型“ Windows.Foundation.String”分配给该类型...

我们还在单独的库中的ResourceDictionary中尝试了该解决方案

<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>
Run Code Online (Sandbox Code Playgroud)

那么错误是

{Windows.UI.Xaml.Markup.XamlParseException:无法从pack:// application:,, / LibraryName; component / Styles / Custom.xaml'找到资源

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

Jay*_*Zuo 5

正如@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>
Run Code Online (Sandbox Code Playgroud)

要么

<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>
Run Code Online (Sandbox Code Playgroud)

同样不要忘记在主项目的References中添加“ ClassLibrary1” 。

此外,如果你的类库是不是在同一个解决方案,那么你将需要检查“生成库布局”中的选项构建类库的属性页下的配置。

因为在WinRT环境中,资源不再嵌入到程序集中,而是作为内容放置在dll旁边。因此,我们需要生成库布局,以便我们可以方便地在其他项目中引用dll。有关更多信息,请参见我以前的答案