2010-08-09 3 views
2

Cela fonctionne:Pourquoi XamlReader est-il lancé lorsque j'utilise un ParserContext?

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

Cela jette La balise 'Pig' n'existe pas dans l'espace de noms XML 'clr-namespace: Ferme; assemblage = Ferme':

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

Pourquoi?

La batterie est l'application appelante.

Répondre

1

Ce que vous avez fonctionnera dans .NET 4.0, mais malheureusement pas dans .NET 3.5. Essayez d'utiliser XamlTypeMapper à la place:

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

Si vous souhaitez utiliser un préfixe d'espace de noms, vous pouvez déclarer un espace de noms clr à la cartographie de l'espace de noms XML avec le XamlTypeMapper puis déclarer un préfixe d'espace de noms pour l'espace de noms 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

Le premier exemple nécessite la ligne 'context.XamlDictionary.Add (" "," Foo ");' pour fonctionner. – CannibalSmith

Questions connexes