AssemblyInfo.cs
複数の CLR 名前空間を単一の XML 名前空間にグループ化する WPF プロジェクトがあります。
[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 名前空間に配置すると、すべてが機能しますが、残念ながらこれはオプションではありません。XAML コンテンツを動的にロードする目的で、複数の CLR 名前空間を単一の XML 名前空間にマップした人はいますか?
前もって感謝します!