Windows 10 Universal Merged Dictionaries

时间:2015-11-13 22:29:42

标签: xaml uwp

所以我有一个Windows通用类库,其中包含一个资源字典,我想与App.xaml中的Windows 10 Universal Application主资源字典合并。

我的App.xaml只是在同一个程序集中的主资源字典中合并。

<Application.Resources>
    <ResourceDictionary>

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Styles/Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>

    </ResourceDictionary>
</Application.Resources>

然后从我的主资源字典(Styles / Styles.xaml)中我合并来自同一程序集的其他资源字典。这是我想在另一个程序集的资源字典中合并的地方:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Fields.xaml"/>
    <ResourceDictionary Source="DataTemplates.xaml"/>
    <!--<ResourceDictionary Source="/{AssemblyName};component/Shared.xaml" />-->
    <!--<ResourceDictionary Source="pack://application:,,,/{AssemblyName};component/Shared.xaml" />-->
    <ResourceDictionary Source="ms-appx:///{AssemblyName}/Shared.xaml" />
</ResourceDictionary.MergedDictionaries>

我已经尝试将其添加到我的主资源字典中:

<ResourceDictionary Source="/{AssemblyName};component/Shared.xaml" />

这......

<ResourceDictionary Source="ms-appx:///{AssemblyName}/Shared.xaml" />

基于this article有关Windows 8.x商店应用的信息,这似乎 的工作原理。但它仍然无法发挥作用。

这......

<ResourceDictionary Source="pack://application:,,,/{AssemblyName};component/Shared.xaml" />

(这是WPF的方式,我知道,但我想我还是试一试!)

但似乎没有工作......

我在应用程序集中的资源字典的构建操作设置为“页面”。这些资源字典只是在合并中使用它:

<ResourceDictionary Source="Styles/Styles.xaml"/>

我收到以下神秘错误:

  

无法分配属性   &#39; Windows.UI.Xaml.ResourceDictionary.Source&#39;因为类型   &#39; Windows.Foundation.String&#39;无法分配到该类型   &#39; Windows.Foundation.Uri&#39 ;. [行:12位置:37]

2 个答案:

答案 0 :(得分:6)

正如Romasz在评论中提到的,您需要参考包含样式的项目。然后使用以下代码来引用。

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ms-appx:///UserControlLibs/Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

enter image description here

答案 1 :(得分:1)

XAML Merged Dictionaries比它们看起来更棘手。如果你引用一个本地项目,那么一切都很好,那么你的Source =路径就好了。

如果您引用外部 DLL(不在解决方案中),引用的DLL文件夹也必须包含所有* .xml,* .xr.xml,* .xbf,* .jpg / png / gif等。

我遵循的程序是: 1.引用DLL包含合并的字典(XAML样式表)。 2.确保参考路径包含所有必需文件。 3.将合并的字典引用添加到App.xaml

plt.show()

这个PostBuild.bat文件描述了我如何在成功构建时复制所有必需的文件:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ms-appx:///NAMESPACE_HERE/Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

希望这有帮助!