我的解决方案中有两个项目。第一个项目是 WPF 应用程序,另一个是常规 DLL 项目。在DLL项目中,我有一些WPF用户控件。我希望这些控件共享一些资源并在DLL中定义它们。
我知道在常规WPF应用程序中,您可以在App.xaml中指定应用程序资源。 DLL项目中是否有等价物?
答案 0 :(得分:5)
是的,您可以像这样在DLL中创建资源XAML(确保您在DLL中引用了所有WPF程序集):
<!-- name of the dictionary is MyResources in MyDLL namespace -->
<ResourceDictionary x:Class="MyDLL.MyResources"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="./Controls/ButtonStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
并将其添加到WPF项目中App类的资源中:
public App()
{
MyDLL.MyResources externalRes = new MyDLL.MyResources();
this.Resources.Add("MyExternalResources", externalRes);
}
答案 1 :(得分:2)
不,dll中没有等价物,因为资源加载不是程序集(exe)的一部分,而是应用程序的一部分。为了加载资源,必须加载应用程序。 App是应用程序的根元素,而不是exe程序集。要在dll中执行控件的等效操作,您可以创建一个单独的ResourceDictionary,并通过使用ResourceDictionary.MergedDictionaries将其合并到UserControl的资源中,将其添加到每个控件的XAML中。