У меня есть проект 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 создается нормально, но теперь я пытаюсь динамически загружать файлы 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?
Заранее спасибо!