能否在多个项目之间共享 ResourceDictionary 文件?

20
如果我在一个项目中有一个ResourceDictionary,那么是否可以创建另一个项目来使用第一个项目中定义的资源?请注意,这两个项目都是WPF应用程序,而不是ControlLibraries。
谢谢!

重复的吗?https://dev59.com/CnRC5IYBdhLWcg3wUvQS - Ignacio Soler Garcia
2个回答

32

当然可以,只要项目B有对项目A的引用。

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Project A;component/YourSubFolder/YourResourceFile.xaml" />
</ResourceDictionary.MergedDictionaries>

那么你可以直接使用在 YourResourceFile.xaml 中定义的资源。


哦,太好了。我试一下!谢谢!! - Mark Carpenter
如果项目没有共享引用会发生什么?在我的情况下,我正在使用 PRISM 并在 Shell 中声明样式。我希望能够重用一些定义的颜色。 - R4cOOn
如果样式在 Shell 中定义,那么每个对象都可以使用它们。由于 XAML 在运行时加载到 MainPage 中,因此它也可以访问全局资源。 - user112889

13

我发现我必须引用程序集本身而不是使用项目名称。我也不需要使用pack:///语法来使其工作。

在重复的问题上,这个答案指定了要使用的格式(我可以验证这个语法在.NET 4.0中有效):https://dev59.com/CnRC5IYBdhLWcg3wUvQS#10216253

具体来说(因为我总是忘记组件部分,认为这是某人正在使用的文件夹):

<ResourceDictionary.MergedDictionaries>
   <ResourceDictionary Source="/<YourAssemblyName>;component/<YourReferencedFileHere.xaml>" />
</ResourceDictionary.MergedDictionaries>

如果你有一个名为 Abc.Def.dll 的程序集和该 DLL 中位于根级别的一个名为 Xyz.xaml 的文件,那么你可以使用以下代码:

<ResourceDictionary.MergedDictionaries>
   <ResourceDictionary Source="/Abc.Def;component/Xyz.xaml" />
</ResourceDictionary.MergedDictionaries>

注意:Resharper 7 指出我需要引用该程序集本身。


感谢您提供具体示例并指出路径组件的必要性。这比我遇到的其他半打解决方案都更有帮助。 - Pete Magsig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接