我有要在多个单独的应用程序中使用的资源字典文件(MenuTemplate.xaml,ButtonTemplate.xaml等)。我可以将它们添加到应用程序的程序集中,但是最好将这些资源编译到一个程序集中,并让我的应用程序引用它,对吗?
构建资源程序集后,如何在我的应用程序的App.xaml中引用它?当前,我使用ResourceDictionary.MergedDictionaries合并单个词典文件。如果我将它们放在程序集中,如何在xaml中引用它们?
我有要在多个单独的应用程序中使用的资源字典文件(MenuTemplate.xaml,ButtonTemplate.xaml等)。我可以将它们添加到应用程序的程序集中,但是最好将这些资源编译到一个程序集中,并让我的应用程序引用它,对吗?
构建资源程序集后,如何在我的应用程序的App.xaml中引用它?当前,我使用ResourceDictionary.MergedDictionaries合并单个词典文件。如果我将它们放在程序集中,如何在xaml中引用它们?
Answers:
查看pack URI语法。您想要这样的东西:
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
AppDomain.AssemblyResolve
以帮助它找到程序集。
举例来说,仅需15秒即可回答-
假设您在名为“ common”的WPF库中具有“ styles.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是您的一个选择。但这不是必需的,除非您要修改资源而不重新编译应用程序。也可以选择只有一个公共ResourceDictionary文件。这取决于您更改资源等的频率。
<ResourceDictionary Source="pack://application:,,,/
<MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/>
MyAssembly-仅扩展名,无扩展名
FolderStructureInAssembly-如果资源位于文件夹中,请指定文件夹结构
在执行此操作时,最好也了解siteOfOrigin。
WPF支持两个权限:application:///和siteoforigin:///。application:///权限标识在编译时已知的应用程序数据文件,包括资源和内容文件。siteoforigin:///权限标识原始文件的站点。下图显示了每个权限的范围。
对于UWP:
<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />
使用XAML:
如果你知道其他的assembly
结构,并希望resources
在C#代码,然后用下面的代码:
ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute);
foreach (var item in dictionary.Values)
{
//operations
}
输出:如果我们要使用ResourceDictionary
RD1.xaml
Project WpfControlLibrary1
进入StackOverflowApp
项目。
项目结构:
代码输出:
PS:所有ResourceDictionary
文件都应带有Build Action
“ Resource
”或“ Page
”。
使用C#:
如果有人想要纯c#代码的解决方案,请参阅我的解决方案。