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