在另一个程序集中引用ResourceDictionary

时间:2015-07-30 06:38:16

标签: c# wpf xaml

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

然后在其中一个项目中(命名空间" MyCompany.Something")我引用了dll,并且我想使用我在" MyCompany"中的资源字典。

我发现了这个:Add ResourceDictionary to class library

所以我完全按照它说的做了,我的xaml文件位于" MyCompany"根目录命名为" Recursos.xaml",构建动作设置为Resource,而不是复制和空白自定义工具和自定义工具命名空间,具有以下内容:

<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>

刚刚添加了Controls.xaml用于测试目的。那个有用,但是我没有:

查找资源字典"pack://application:,,,/MyCompany;component/Recursos.xaml"

时发生错误

所以我不知道它为什么不认识它。引用正在起作用,因为我可以使用它的每个类。

3 个答案:

答案 0 :(得分:2)

尝试这样它会起作用: ABC项目提到项目XYZ。

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

然后您可以使用YourResourceFile.xaml中定义的资源。

答案 1 :(得分:1)

您需要将ResourceDictionary添加为:

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

答案 2 :(得分:0)

我认为两年后这对你没有帮助。可以为其他人做:)确保,关闭VS并在引用外部xaml后重新打开sln ...对我来说诀窍...... XAML-Editor部分仍然不是100%(VS2017好多了,因为它已经,但仍然......有一些类似的问题)

并且不要忘记添加:

    Sub New()

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

    End Sub

在Window / Control的ctor中消耗资源BEFORE调用&#34; InitializeComponent()&#34;

tslint.json

否则会出现运行时错误...