ResourceDictionary在一个单独的程序集中

我有资源字典文件(MenuTemplate.xaml,ButtonTemplate.xaml等),我想在多个单独的应用程序中使用。 我可以将它们添加到应用程序的程序集中,但是如果我在一个程序集中编译这些资源,并让我的应用程序引用它,那会更好吗?

在构build资源组件之后,如何在我的应用程序的App.xaml中引用它? 目前我使用ResourceDictionary.MergedDictionaries合并单个字典文件。 如果我在一个程序集中有他们,我怎么能在xaml中引用它们?

检查包URI的语法 。 你想要这样的东西:

<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/> 

一个例子,只是为了让这个15秒的答案 –

假设您在名为“common”的WPF库中有“styles.xaml”,并且您想从主应用程序项目中使用它:

  1. 将主项目的参考添加到“普通”项目中
  2. 你的app.xaml应该包含:

 <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> 

干杯

我正在使用.NET 4.5,不能得到这个工作…我正在使用WPF自定义控制库。 这对我来说最终…

 <ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" /> 

来源: http : //social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19

纯资源DLL是您的一个select。 但是这并不是必须的,除非你想在没有重新编译应用程序的情况下修改资源。 只有一个常见的ResourceDictionary文件也是一个选项。 这取决于你改变资源的频率等

 <ResourceDictionary Source="pack://application:,,,/ <MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/> 

MyAssembly – 只是没有扩展名的程序集名称

FolderStructureInAssembly – 如果您的资源在文件夹中,请指定文件夹结构

当你这样做的时候最好也知道siteOfOrigin

WPF支持两个权限:application:///和siteoforigin:///。 application:/// authority标识编译时已知的应用程序数据文件,包括资源和内容文件。 siteoforigin:///权限标识源文件的站点。 每个权限的范围如下图所示。

在这里输入图像说明

使用XAML:

如果你知道其他的assembly结构,并希望在C#代码的resources ,然后使用下面的代码:

  ResourceDictionary dictionary = new ResourceDictionary(); dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute); foreach (var item in dictionary.Values) { //operations } 

输出:如果我们要使用Project WpfControlLibrary1 ResourceDictionary WpfControlLibrary1StackOverflowApp项目中。

项目结构

项目结构

资源词典: 资源字典

代码输出:

产量

PS:所有的ResourceDictionary文件都应该有Build Action作为“ Resource ”或“ Page ”。

使用C#:

如果有人想要纯粹的C#代码的解决scheme,那么看看我的这个解决scheme。

对于UWP:

 <ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />