我的解决方案中有两个项目。第一个项目是一个WPF应用程序,另一个是常规的DLL项目。在DLL项目中,我有一些WPF用户控件。我希望这些控件共享一些资源,并在DLL中定义它们。
我知道在常规的WPF应用程序中,您可以在App.xaml中指定应用程序资源。在DLL项目中有相应的方法吗?
我的解决方案中有两个项目。第一个项目是一个WPF应用程序,另一个是常规的DLL项目。在DLL项目中,我有一些WPF用户控件。我希望这些控件共享一些资源,并在DLL中定义它们。
我知道在常规的WPF应用程序中,您可以在App.xaml中指定应用程序资源。在DLL项目中有相应的方法吗?
是的,您可以像这样在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);
}
没有等价的DLL,因为资源加载不是程序集(exe)的一部分,而是应用程序的一部分。为了加载资源,必须加载应用程序。App是应用程序的根元素,而不是exe程序集。要在DLL中为控件做相当的事情,可以创建一个单独的ResourceDictionary,并通过将其合并到UserControl的资源中,使用ResourceDictionary.MergedDictionaries将其添加到每个控件的XAML中。