Почему XamlReader выбрасывает, когда я использую ParserContext? - PullRequest
2 голосов
/ 10 августа 2010

Это работает:

XamlReader.Parse("<Pig xmlns=\"clr-namespace:Farm;assembly=Farm\"/>");

Это выдает Тег 'Pig' не существует в пространстве имен XML 'clr-namespace: Farm; Assembly = Farm' :

var context = new ParserContext();
context.XmlnsDictionary.Add("", "clr-namespace:Farm;assembly=Farm");
XamlReader.Parse("<Pig/>", context);

Почему?

Ферма является вызывающим приложением.

1 Ответ

1 голос
/ 10 августа 2010

То, что у вас есть, будет работать в .NET 4.0, но, к сожалению, не в .NET 3.5.Попробуйте вместо этого использовать XamlTypeMapper:

var context = new ParserContext();
context.XamlTypeMapper = new XamlTypeMapper(new string[] { });
context.XamlTypeMapper.AddMappingProcessingInstruction("", "Farm", "Farm");
XamlReader.Parse("<Pig/>", context);

Если вы хотите использовать префикс пространства имен, вы можете объявить пространство имен clr для сопоставления пространства имен xml с XamlTypeMapper, а затем объявить префикс пространства имен для пространства имен xml.

var context = new ParserContext();
context.XamlTypeMapper = new XamlTypeMapper(new string[] { });
context.XamlTypeMapper.AddMappingProcessingInstruction("Foo", "Farm", "Farm");
context.XmlnsDictionary.Add("a", "Foo");
XamlReader.Parse("<a:Pig/>", context);
...