我有一个 WPF 项目,其中将AssemblyInfo.cs
多个 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>
这在正常实例化 XAML 时效果很好,但现在我正在尝试使用XamlReader
.
问题:我似乎无法将多个 CLR 命名空间映射到单个 XML 命名空间。似乎添加到的最后一个定义XamlTypeMapper
是唯一持续存在的定义(例如,它破坏了以前的注册):
var parserContext = new ParserContext();
parserContext.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml");
parserContext.XmlnsDictionary.Add("fb", "http://foo.bar");
parserContext.XamlTypeMapper = new XamlTypeMapper(new string[] {"MyLibrary"});
parserContext.XamlTypeMapper.AddMappingProcessingInstruction("http://foo.bar", "MyLibrary.Converters", "MyLibrary");
parserContext.XamlTypeMapper.AddMappingProcessingInstruction("http://foo.bar", "MyLibrary.Controls", "MyLibrary");
...
var rootNode = XamlReader.Load(memeoryStream, parserContext) as FrameworkElement
错误信息是:
'Cannot create unknown type '{http://foo.bar}MyConverter'.'
如果全部将我的所有代码放在一个公共 CLR 命名空间下,一切正常,但不幸的是,这不是选项。是否有人将多个 CLR 命名空间映射到单个 XML 命名空间以动态加载 XAML 内容?
提前致谢!