Wpf XamlReader-将多个CLR命名空间映射到单个XML命名空间

Wpf XamlReader-将多个CLR命名空间映射到单个XML命名空间,wpf,xaml,xamlreader,Wpf,Xaml,Xamlreader,我有一个带有AssemblyInfo.cs的WPF项目,它将多个CLR名称空间分组到一个XML名称空间中: [assembly: XmlnsDefinition("http://foo.bar", "MyLibary.Controls")] [assembly: XmlnsDefinition("http://foo.bar", "MyLibary.Converters")] 在XAML中,这样使用: <UserControl xmlns="http://schemas.microsof

我有一个带有
AssemblyInfo.cs
的WPF项目,它将多个CLR名称空间分组到一个XML名称空间中:

[assembly: XmlnsDefinition("http://foo.bar", "MyLibary.Controls")]
[assembly: XmlnsDefinition("http://foo.bar", "MyLibary.Converters")]
在XAML中,这样使用:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:fb="http://foo.bar">
    <fb:FooButton IsEnabled="{Binding Something, Converter={fb:FooConverter}}"/>
</UserControl>
错误消息是:

'Cannot create unknown type '{http://foo.bar}MyConverter'.'
如果所有人都将我的所有代码放在一个公共CLR命名空间下,那么一切都可以工作,但不幸的是,这不是一个选项。是否有人为了动态加载XAML内容而将多个CLR命名空间映射到单个XML命名空间


提前谢谢

如上所述,解决方案是在调用
XamlReader.load
并同时删除类型映射器和上下文之前手动加载程序集:

Assembly.Load("MyLibrary");
var rootNode = XamlReader.Load(memeoryStream) as FrameworkElement

由于
XamlTypeMapper
是用程序集列表初始化的,因此我假设该类将负责加载程序集(可能是这样)但是,
addMappingProcessingInstruction
的行为阻止了此操作。

这表明需要实际加载程序集才能使多个CLR命名空间工作。谢谢,没有看到该线程。删除对AddMappingProcessingInstruction的所有调用,并在XamlReader.Load()之前使用Assembly.Load()似乎已经做到了这一点。
Assembly.Load("MyLibrary");
var rootNode = XamlReader.Load(memeoryStream) as FrameworkElement