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”,并且您想从主应用程序项目中使用它:
- 将主项目的参考添加到“普通”项目中
- 你的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
WpfControlLibrary1
到StackOverflowApp
项目中。
项目结构 :
资源词典:
代码输出:
PS:所有的ResourceDictionary
文件都应该有Build Action
作为“ Resource
”或“ Page
”。
使用C#:
如果有人想要纯粹的C#代码的解决scheme,那么看看我的这个解决scheme。
对于UWP:
<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />