无法从引用的项目中合并ResourceDictionary

时间:2012-09-14 19:23:51

标签: wpf xaml resourcedictionary

我有两个程序集,每个程序集都提供了一组我希望包含在应用程序中的通用样式和资源。我在我的App.xaml中使用合并的词典来加载它们,并且在运行时它们很好。遗憾的是,这些资源不会在设计时加载,在我的错误窗口中填充有关无法解析的资源的消息,并为我提供一个不代表实际显示内容的UI。

这是我现在的App.xaml:

<Application x:Class="ClientDebug.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             >
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Dai.Common;component/Xaml/Common.xaml" />
                <ResourceDictionary Source="/Dai.DevExpress;component/Xaml/Styles.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

对于这两个合并的词典,我在“错误”窗口中收到以下错误:

Error   11  An error occurred while finding the resource dictionary "/Dai.Common;component/Xaml/Common.xaml".   C:\DevProjects\Core Application\ClientDebug\App.xaml    12  17  ClientDebug
Error   12  An error occurred while finding the resource dictionary "/Dai.DevExpress;component/Xaml/Styles.xaml".   C:\DevProjects\Core Application\ClientDebug\App.xaml    13  17  ClientDebug

显然缺少有用的信息。同样,它们在运行时按照您的预期加载,但在设计时没有任何资源可用。

4 个答案:

答案 0 :(得分:1)

每次我开始一个新的WPF项目或者从几天前开始使用旧项目时,我都会这样做。我开始提出一个问题来寻求帮助,只是因为它在测试解决方案上消失了!似乎Visual Studio不是很稳定,谁知道?

问题的核心是Xaml设计器不允许您从仅适用于您的应用程序项目引用解决方案中的其他项目。解决方法是将所有内容移动到库中,让应用程序只需在代码中将控制权移交给它。 Inelegant和App.Xaml的丢失是非常艰难的,但它比等待Visual Studio神奇地计算出来要好得多。

答案 1 :(得分:0)

我在其他名称空间的字典之前加上“pack:// application:,,,”,如下所示:

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Wsi.Util;component/DataGrid/NameValueDataGridDictionary.xaml" />
            <ResourceDictionary Source="LayoutStylesDictionary.xaml" />
            <ResourceDictionary Source="pack://application:,,,/Wsi.Util;component/controls/ToolBarResources.xaml" />
            <ResourceDictionary Source="pack://application:,,,/Wsi.Common;component/view/themes/FilterStylesResourceDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>

HTH,

Janene

答案 2 :(得分:0)

我在我的一个项目中尝试了类似的合并,我似乎完美地工作了。 (左右,请原谅我,如果它的一些设置很久以前我可能已设置..)我唯一可以问的问题是xamls是指父项目中的任何内容吗?我假设你也有一个对父项目的引用(只是交叉检查)。也许xaml文件也需要另一个xaml文件(控件,颜色,字体等)。 (我尝试的合并来自MahApps。)

  <Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>

答案 3 :(得分:0)

我通过签署引用的项目解决了这个问题。

问题是:我的项目是使用密钥文件签署的,但引用的项目不是。

要解决:

  • 将项目加载到解决方案中
  • 打开项目属性
  • 导航至&#39;签名&#39;
  • 点击&#39;签署程序集&#39;
  • 选择&#39;&lt;新...&gt;&#39;从组合框
  • 输入名称,例如。 &#39;密钥文件&#39; (&#39;使用密码保护我的密钥文件&#39;是可选的)
  • 重建解决方案