WPF:DLL中等效的应用程序资源

bbq*_*ito 7 wpf wpf-controls resourcedictionary c#-4.0

我的解决方案中有两个项目.第一个项目是WPF应用程序,另一个是常规DLL项目.在DLL项目中,我有一些WPF用户控件.我希望这些控件共享一些资源并在DLL中定义它们.

我知道在常规WPF应用程序中,您可以在App.xaml中指定应用程序资源.DLL项目中是否有等价物?

小智 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>
Run Code Online (Sandbox Code Playgroud)

并将其添加到WPF项目中的App类的资源中:

public App()
{
    MyDLL.MyResources externalRes = new MyDLL.MyResources();

    this.Resources.Add("MyExternalResources", externalRes);
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*wen 3

不,DLL 中没有等效项,因为资源加载不是程序集 (exe) 的一部分,而是应用程序的一部分。为了加载资源,必须加载应用程序。App 是应用程序的根元素,而不是 exe 程序集。要对 dll 中的控件执行相同的操作,您可以创建一个单独的 ResourceDictionary,并通过使用 ResourceDictionary.MergedDictionaries 将其合并到 UserControl 的资源中,将其添加到每个控件的 XAML 中。