来自外部组件的问题参考转换器

时间:2011-05-17 08:37:12

标签: wpf resourcedictionary mergeddictionaries

我正在创建一个资源字典,我引用了所有转换器,因此无需引用每个转换器。 我的转换器在不同的程序集中,要导入它们,我会执行以下操作:

  1. 添加对外部装配的引用
  2. 创建资源字典
  3. 添加xml名称空间引用转换器程序集
  4. 参考转换器
  5. 所以我的词典看起来像:

        <ResourceDictionary xmlns:Converters="clr-namespace:Client.Utilities.Converters;assembly=Client.Utilities">
    
        <Converters:BoolToBrushConverter x:Key="boolToBrush"/>
    
    </ResourceDictionary>
    

    但是我在尝试构建时遇到以下异常:

    Error   18  The tag 'BoolToBrushConverter' does not exist in XML namespace 'clr-namespace:Client.Utilities.Converters;assembly=.Client.Utilities'. Line 12 Position 6.  C:\Resources.Tests\Resources\ResourceDictionaries\Converters\ConvertersResources.xaml   12  6   Client.eZenith.Resources.Tests
    

    为什么会发生这种情况?

    注意:从intellisense看,似乎转换器程序集的命名空间是正确的,因为在输入<Converter:之后所有转换器都显示在建议列表中

    编辑:VS和混合设计师都能够在渲染控件预览时找到转换器。

    编辑:我已经发现,这与要合并的字典无关。将转换器添加到 Window的资源时会出现同样的问题。

2 个答案:

答案 0 :(得分:1)

我最终发现了这个问题,它是在.NET 4中引入的合并resourcedictionary bug。

我已经通过在合并的资源字典中添加一个空样式来修复它(之前我有一个RD,我正在合并其他RD而没有别的)。

here是我最近发现的一篇博文,其中描述了同样的问题。

答案 1 :(得分:0)

尝试使用

<ResourceDictionary xmlns:Converters="clr-namespace:Client.Utilities.Converters;assembly=Client.Utilities">

代替。
更改:clr-namespace而不是namespace