Question

J'ai une représentation de chaîne d'une grille XAML comme ceci:

<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 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.

Dois-je une erreur dans un code XAML que je ne peux pas voir? Ou est la mauvaise approche?

Merci pour une réponse

Était-ce utile?

La solution

Quelle version du cadre utilisez-vous? Dans 4 vous avez des classes supplémentaires dans System.Xaml plus flexibles. Vous pouvez utiliser System.Xaml.XamlServices.Load(stream); pour obtenir l'objet Grille exacte dans le XAML lâche. Cependant, utilisant à la fois 4 et 3,5 dans VS2010, votre code exact (dans le second extrait) renvoie le résultat attendu. Je ne sais pas quel est le problème de votre côté, mais il pourrait ne pas être le code affiché.

Autres conseils

Essayez aussi ajouter xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" à la racine élément Grid. Aussi, vous ne avez pas besoin à nouveau les xmlns en toile (mais il ne fait pas mal non plus - sauf que vos cordes deviennent inutilement grand)

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top