ResourceDictionary 源中的 Uri 语法(通用 Windows 平台)

Pon*_*iat 4 c# xaml windows-10 uwp

我正在将我的Windows 8.1项目迁移到Windows 10(通用 Windows 平台)。这一刻我被ResourceDictionary变化阻止了UWP停住了。

为简单起见:我有包含 2 个项目的 Windows 8.1 解决方案:

App project (FooApp)+ Styles (FooStyles) project.
Run Code Online (Sandbox Code Playgroud)

FooApp 引用了 FooStyles,并且App.xaml我有:

<Application.Resources>
<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ms-appx:///FooStyles/Brushes.xaml"/>
    </ResourceDictionary.MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)

ms-appx语法允许我访问其他项目的资源文件。现在,在 Windows 10 应用程序中,此功能不再起作用。编译结束并出现以下错误:

"An error occurred while finding the resource dictionary "ms-appx:///FooStyles/Brushes.xaml"."
Run Code Online (Sandbox Code Playgroud)

这里有什么建议来修复它吗?

PS 我不会将我的资源从 FooStyles 移动到 FooApp,因为在我的解决方案中,FooStyles 在 5 个其他应用程序项目之间共享。

Mus*_*ion 6

在 UWP 中,您必须指定命名空间才能实现此目的。另外,我发现 XAML 资源字典仅在“属性”部分中标记为“页面”时才以这种方式引用。

然后在您的应用程序 xaml 中:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ms-appx:///Default.Namespace.External.Assembly/FolderPathOffRoot/Brushes.xaml"/>
        </Application.Resources>
    </ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)

不要对 ms-appx 感到困惑,它指的是您的包,而不仅仅是包含应用程序的项目。