引用另一个程序集中的资源字典

本文关键字:资源 字典 集中 程序集 另一个 程序 引用 | 更新日期: 2023-09-27 18:05:24

我有一个类库项目,它与其他几个项目相同。它的程序集名称是"MyCompany",其默认命名空间也是"。

然后在这些其他项目之一(命名空间"MyCompany. something")中,我引用了dll,并且我想使用我在"MyCompany"中拥有的资源字典。

我发现了这个:添加ResourceDictionary到类库

所以我做了它所说的,我的xaml文件位于"MyCompany"根目录被命名为"Recursos"。,构建动作设置为资源,不复制和空白自定义工具和自定义工具命名空间,具有以下内容:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
    <ResourceDictionary Source="pack://application:,,,/Resources/Icons.xaml"/>
 </ResourceDictionary.MergedDictionaries>
  -- some other styles...
 </ResourceDictionary>

然后,在我的WPF应用程序项目中,我在app .xaml中有以下内容:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MyCompany;component/Recursos.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

刚刚添加了控件。用于测试的Xaml。那个可以,但是我的不行:

查找资源字典"pack://application:,,,/MyCompany;component/Recursos.xaml"时发生错误

所以我不知道为什么它不认识它。参考是工作的,因为我可以使用它的每一个类。

引用另一个程序集中的资源字典

试试这样就可以了:项目ABC有一个对项目XYZ的引用。

   <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/Project XYZ;component/YourSubFolder/YourResourceFile.xaml" />
    </ResourceDictionary.MergedDictionaries>

那么你可以直接使用在YourResourceFile.xaml中定义的Resources .

您需要将您的ResourceDictionary添加为:

<ResourceDictionary Source="/MyCompany;component/Recursos.xaml" />

我想这对两年后的你没有帮助。可以为其他人做:)确保,在引用外部xaml后关闭VS并重新打开sln…对我起了作用……xaml编辑器部分仍然不是100%(在VS2017中要好得多,因为它一直是,但仍然…有一些这样的问题)

别忘了加上:

System.Reflection.Assembly.LoadFrom("yourResourceAssemblyfullpath")

在调用InitializeComponent()之前,在消耗资源的窗口/控件的元素中"

    Sub New()
    System.Reflection.Assembly.LoadFrom("yourResourceAssemblyfullpath")
    InitializeComponent()
    End Sub