IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

XamlReader: exception Name/x:Name


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Par défaut XamlReader: exception Name/x:Name
    Bonjour,
    j'ai besoin de sérialiser puis de désérialiser un usercontrol, pour cela, j'ai voulu utilisé XamlWriter/XamlReader
    J'ai fais un usercontrol tout simple:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <UserControl x:Class="UCTest"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <Grid>
            <Button x:Name="btnTest" Content="Hello !" Width="50" Height="25"/>
        </Grid>
    </UserControl>

    et voici mon code pour serialiser/déserialiser
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    'nouveau usercontrol
    Dim uc As New UCTest()
    'on sérialise le usercontrol
    Dim str As String = Markup.XamlWriter.Save(uc)
     
    'traitement ...
     
    Dim stringReader As New IO.StringReader(str)
    Dim xmlReader As Xml.XmlReader = Xml.XmlReader.Create(stringReader)
    'on déserialise le usercontrol
    Dim obj = CObj(Markup.XamlReader.Load(xmlReader)) ' -> exception

    et j'obtiens l'exception suivante:
    La valeur 'btnTest' ne peut pas être attribuée à la propriété 'Name' de l'objet 'System.Windows.Controls.Button'. Impossible d'inscrire en double Name 'btnTest' dans cette portée.
    En sachant que pour tester, je n'ai fais aucune modification sur str (le usercontrol sérialiser)
    J'obtiens la même erreur si dans le usercontrol, a la place de "x:Name" je met simplement "Name".
    Et je n'ai pas d'erreur s'il je ne spécifie pas de "Name"
    La chaine que j'obtiens après le XamlWriter est :
    <UCTest xmlns="clr-namespace:WpfApplication;assembly=WpfApplication" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation"><av:Grid><av:Button Name="btnTest" Width="50" Height="25">Hello !</av:Button></av:Grid></UCTest>

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Par défaut
    Bonjour,
    J'ai exactement le même problème (en C#). As-tu pu trouver une réponse depuis ?

    Merci

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    ca serait possible d'avoir un petit projet exemple juste comme ca je regarderais
    la sérialisation en particulier
    et si je trouve c'est champagne pour tt le monde

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    bon il faut utiliser un parser context et ajouter ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
           private void button1_Click(object sender, RoutedEventArgs e)
            {
                UCTest uc = new UCTest();
                str = System.Windows.Markup.XamlWriter.Save(uc);
                Console.WriteLine("--------------------------------------------------------------");
                Console.WriteLine(str);
                Console.WriteLine("--------------------------------------------------------------");
            }
     
            private void button2_Click(object sender, RoutedEventArgs e)
            {
                //StringReader stringReader = new StringReader(str);
                //XmlReader xmlReader = System.Xml.XmlReader.Create(stringReader);
                //'on déserialise le usercontrol
     
                byte[] byteArray = Encoding.ASCII.GetBytes( str );
                MemoryStream xmlStream = new MemoryStream(byteArray);
                ParserContext pc = new ParserContext();
                pc.XmlnsDictionary.Add( "", "http://schemas.microsoft.com/winfx/2006/xaml/presentation" );
                pc.XmlnsDictionary.Add( "x", "http://schemas.microsoft.com/winfx/2006/xaml" );
                pc.XmlnsDictionary.Add( "sys", "clr-namespace:System;assembly=mscorlib" );
                pc.XmlnsDictionary.Add("local", "clr-namespace:xaml_serializer_deserializer");
                object obj = XamlReader.Load(xmlStream, pc);
            }
    j'ai encore un prob avec le namespace courant mais je vais trouver

    d'ailleur en faisant ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
            private string xx = 
    "<UserControl " + 
    //"x:Class=\"xaml_serializer_deserializer.UCTest\" " +
    "xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" " +
    "xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" " +
    //"xmlns:local=\"clr-namespace:xaml_serializer_deserializer\"             " +
    ">" +
    "<Grid>" + 
    "<Button x:Name=\"btnTest\" Content=\"Hello !\" Width=\"50\" Height=\"25\"/>" +
    "</Grid>" +
    "</UserControl>";
     
            private void button2_Click(object sender, RoutedEventArgs e)
            {
                //StringReader stringReader = new StringReader(str);
                //XmlReader xmlReader = System.Xml.XmlReader.Create(stringReader);
                //'on déserialise le usercontrol
     
                byte[] byteArray = Encoding.ASCII.GetBytes( xx );
                MemoryStream xmlStream = new MemoryStream(byteArray);
                ParserContext pc = new ParserContext();
                pc.XmlnsDictionary.Add( "", "http://schemas.microsoft.com/winfx/2006/xaml/presentation" );
                pc.XmlnsDictionary.Add( "x", "http://schemas.microsoft.com/winfx/2006/xaml" );
                pc.XmlnsDictionary.Add( "sys", "clr-namespace:System;assembly=mscorlib" );
                pc.XmlnsDictionary.Add("local", "clr-namespace:xaml_serializer_deserializer;assembly=xaml_serializer_deserializer");
                object obj = XamlReader.Load(xmlStream, pc);
            }
    ca marche

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    finalement en cherchant mieux je me rend compte que si la sérialisation était cohérente ca marcherait mieux d'ailleurs .....
    avec les limites qui sont definie
    ici http://msdn.microsoft.com/en-us/library/ms754193.aspx

Discussions similaires

  1. [jsf + richfaces] Exception : no tag was defined for name
    Par fisherprice dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 13/04/2010, 14h33
  2. Feuille name et (name)
    Par flamel dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 09/03/2010, 10h19
  3. Réponses: 2
    Dernier message: 19/02/2010, 16h55
  4. javax.naming.directory.DirContext "Naming exception"
    Par Spiff__ dans le forum Général Java
    Réponses: 4
    Dernier message: 18/05/2009, 11h28
  5. Réponses: 1
    Dernier message: 20/05/2008, 18h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo