0

我有一个 XAML UserControl,它使用同一项目中包含的转换器。

xmlns:filter="clr-namespace:SampleModuleFilter" - namespace definition

到目前为止,一切都很好。但是,当我将转换器移动到另一个程序集中并相应地调整命名空间和引用时,我得到以下异常: XamlParseException - “在 'System.Windows.Markup.StaticResourceHolder' 上提供值引发异常。内部异常状态“方法或操作未实现。”这很奇怪。移动到另一个库后的命名空间如下所示:

xmlns:filter="clr-namespace:SampleLibrary.Converters;assembly=SampleLibrary"

转换器资源定义为:

<filter:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" />

我像这样使用它:

Visibility="{Binding DisplayLabel, Converter={StaticResource ResourceKey=boolToVisibilityConverter}}"

IntelliSense 显然可以看到该库,因为它工作正常(在我编写命名空间前缀后提供转换器类)。

任何想法可能是什么问题?

4

4 回答 4

1

您还必须在代码隐藏文件中引用您的程序集。

如果仅在 XAML 部分中引用程序集,编译器将返回“加载 xxx.dll 失败”异常。

您还必须直接调用连接的程序集,如下所示:

var dummy = new MyExternalAssemby.MyType();

或者只是在新的代码行中

new MyExternalAssemby.MyType();

没有将结果放入虚拟变量中。

通常我在静态构造函数中这样做。我认为这是 XAML 解释器中的一个错误,因为 XAML 没有被编译,而只是在 BAML(二进制 XAML)中“翻译”。因此,如果您在 XAML 中引用了一个类型,而没有在 NET 链接器后面的代码中创建“硬”引用,则会完全忽略它。

HTH 洛伦佐

于 2014-02-06T18:36:39.980 回答
1

而不仅仅是:

 xmlns:filter="clr-namespace:SampleModuleFilter"

也参考程序集

 xmlns:filter="clr-namespace:SampleModuleFilter;assembly=SampleModuleFilterAssemblyName"

这应该够了吧。

于 2014-07-30T14:15:14.400 回答
0

这很奇怪;我们的转换器都位于一个中央图书馆,它工作正常。假设引用和命名空间是正确的,我唯一能建议的就是清理和重建有问题的两个项目。

于 2012-04-13T14:09:14.960 回答
0

“SampleLibrary.dll”是否在您的代码中某处使用?

我遇到了一个奇怪的错误,其中仅在 xaml 文件中使用的引用程序集在编译时被跳过,并且不会出现在 dll 依赖项中。

于 2012-04-13T14:10:26.270 回答