2010-09-24 22 views
1

J'ai une représentation de chaîne d'une grille XAML comme ceci:Création d'une grille de chaîne à l'aide XamlReader

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
    <Canvas Background="Yellow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
     <Label Content="textik" /> 
    </Canvas> 
</Grid> 

Ce que je dois faire est de créer un objet de la grille de cette chaîne. J'ai essayé beaucoup d'approches, mais jusqu'à présent le plus proche est le code ci-dessous:

string content = "<Grid xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Canvas Background=\"Yellow\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Label Content=\"textik\" /></Canvas></Grid>"; 

// the string is created programatically, I just put it here to see what it looks like at the end of the process 

Stream stream = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(content)); 

object objGrid = XamlReader.Load(stream); 
Grid myGrid = (Grid) objGrid; 

Cependant, la XamlParsedException disant que l'se produit élément racine est manquant.

Est-ce que j'ai une erreur dans un code XAML que je ne peux pas voir? Ou l'approche est-elle mauvaise?

Merci pour une réponse

Répondre

2

Quelle version du framework utilisez-vous? Dans 4 vous avez des classes supplémentaires dans System.Xaml qui sont plus flexibles. Vous pouvez utiliser System.Xaml.XamlServices.Load(stream); pour obtenir l'objet Grid exact dans le xaml libre. Cependant, en utilisant à la fois 4 et 3,5 dans VS2010, votre code exact (dans le deuxième extrait) renvoie le résultat attendu. Je ne sais pas quel est le problème de votre côté, mais ce n'est peut-être pas le code que vous avez publié.

+0

Il s'est avéré que le problème était vraiment pas au code que j'ai posté. Des sollutions précédentes, je lisais le flux pour voir ce qu'il y avait à l'intérieur et la méthode ReadToEnd() déplaçait le début du flux jusqu'à la fin, donc le XamlReader.Read() n'obtenait pas le contenu complet ... – Gal

+0

string content = " Gal

0

Essayez d'ajouter également xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" à l'élément de grille racine. De plus, vous n'avez plus besoin des xmlns dans Canvas (mais cela ne fait pas mal non plus - sauf que vos chaînes deviennent inutilement grandes).

+0

Le deuxième xmlns (dans canvas) est créé via XamlReader.Read(). Vous voyez, ce que je fais est de charger un fichier xaml, de jouer à des jeux avec le code, puis d'essayer de créer une grille à partir de la chaîne résultante. Ceci est juste un effet secondaire .. – Gal