WPF markupExtension只有在同一名称空间中才有效

时间:2013-06-19 14:38:12

标签: wpf

我正在按照这里的教程: http://www.wpftutorial.net/LocalizeMarkupExtension.html

并且一切正常......直到我将我的代码分配到不同的项目

所以我有一个继承自MarkupExtension的类(TranslateExtension)。这允许我向WPF添加这样的标记:

<TextBlock Text="{Mynamespace:Translate key1}" Margin="8" ></TextBlock>

并使用必要的文本填充文本块

但是当我想将前端放在另一个项目中时,我会得到以下例外情况:

  • 名称空间
  • 中不存在名称“Translate”
  • 找不到“翻译”类型。验证您是否缺少程序集引用并且已构建所有引用的程序集
  • XML命名空间中不存在“Translate”标记....

我已经在我的XAML文件顶部添加了对命名空间的引用,并且命名空间存在于新项目中。我也从我的前端到我的旧项目有一个参考。

所以一切正常,直到我把前端提取到另一个项目......

重要提示:如果我将TranslateExtensions放在前端,与旧项目中的其他所有东西一起使用,那么事情就会神奇地起作用......

任何想法?

1 个答案:

答案 0 :(得分:2)

clr-namespace:开头的XAML命名空间特定于程序集。如果未指定程序集名称,则假定当前程序集。

最简单的选择是使用程序集限定的命名空间:

xmlns:MyNamespace="clr-namespace:MyNamespace;assembly=MyAssembly"

对于更强大的解决方案,您可能需要查看XmlnsDefinitionAttribute,它可用于将不同程序集中的多个CLR名称空间映射到单个XML名称空间URI。