2010-08-09 3 views
2

Это работает:Почему XamlReader бросает, когда я использую ParserContext?

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

Это проливает Тег 'Pig' не существует в пространстве имен XML 'CLR-имен: Ферма; сборочный = Farm':

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

Почему?

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

ответ

1

У вас будет работать в .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); 
+0

Для первого примера нужна строка 'context.XamlDictionary.Add (" "," Foo ");' to work. – CannibalSmith

 Смежные вопросы

  • Нет связанных вопросов^_^