【问题标题】:Referencing a ResourceDictionary in another assembly在另一个程序集中引用 ResourceDictionary
【发布时间】:2015-10-21 09:30:43
【问题描述】:

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

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

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

所以我完全按照它说的做了,我位于“MyCompany”根目录的 xaml 文件被命名为“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"时出错

所以我不知道为什么它不识别它。该参考有效,因为我可以使用其中的每个类。

【问题讨论】:

  • 嗨,试试&lt;ResourceDictionary Source="/Isaval;component/Recursos.xaml"/&gt; 并确保资源字典的构建操作是Page
  • @rshepp 仍然无法正常工作...
  • Resources.xaml 中可能存在错误,您是否将其他字典合并到它上面?
  • “继续”是什么意思? Recursos.xaml 的完整代码在那里,并且没有任何错误。
  • Resources.xaml 是否将其他字典合并到自身中?就像 Application.Resources 合并它一样。

标签: c# wpf xaml


【解决方案1】:

您需要将ResourceDictionary 添加为:

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

【讨论】:

  • 那么,据我所知,您已将此库添加为外部参考?这不是您解决方案中的另一个项目?
  • 不,这是一个不同的解决方案,它已被编译,然后通过检查和选择 dll 作为参考添加。
【解决方案2】:

尝试这样它会起作用: Project ABC 引用了 Project XYZ。

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

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

【讨论】:

  • 是的,它与 xtnd8 建议的相同,因为该文件不在任何子文件夹中。但它不起作用。
  • 是的,那么您可以直接指定,无需子文件夹
【解决方案3】:

我认为两年后这对您没有帮助。可以为别人做 :) 确保在引用外部 xaml 后关闭 VS 并重新打开 sln...对我有用... XAML-Editor 部分仍然不是 100%(在 VS2017 中要好得多,因为它一直,但仍然......有一些类似的问题)

别忘了加上:

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

在调用“InitializeComponent()”之前消耗资源的窗口/控件的ctor中

    Sub New()

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

    End Sub

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    相关资源
    最近更新 更多