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

时间:2010-12-28 14:29:29

标签: wpf c#-4.0 wpf-controls resourcedictionary

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

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

2 个答案:

答案 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中。