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 :

Impossible de faire marcher ce soit disant "XAML Serialization" !


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 20
    Points
    20
    Par défaut Impossible de faire marcher ce soit disant "XAML Serialization" !
    Bonjour à tous,

    Très simple: j'ai un UserControl avec seulement une RichTextBox dedans. Je l'affiche sur un canvas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <UserControl x:Class="MyNameSpace.SimpleControlRTB"
     
        xmlns:local="clr-namespace:MyNameSpace"         
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="200" Width="200">
        <Grid>
     
                <RichTextBox  x:Name="RTB" Background="Lavender" IsDocumentEnabled="False" Height="200" Width="200" BorderBrush="BlueViolet" BorderThickness="4" />
     
        </Grid>
    </UserControl>

    J'essaie de sérialiser puis désérialiser ce UserControl.
    Si je le fais directement sur le UserControl ça ne marche pas. C'est un bug WPF, c'est sûr. Je l'accepte.

    Alors j'essaye tout simplement de sérialiser/désérialiser la richtextbox qui se trouve à l'intérieur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string XAMLCode = XamlWriter.Save(RTB);
    StringReader XAMLstringReader = new StringReader(XAMLcode);
    XmlReader XMLReader = XmlReader.Create(XAMLstringReader);
    RichTextBox newRTBfromXAML = (System.Windows.Controls.RichTextBox)XamlReader.Load(XMLReader);

    Eh ben, lors que je recolle mon UserControl sur mon canvas avec cette nouvellement créée richtextbox je remarque amèrement que cette procédure ne garde que les modifs effectuées en design-time (dans XAML) sur la richtextbox (RTB).

    Les modifs que je fais lors de l'exécution,
    le texte, le background, le border etc., sont toutes perdues.

    Ce qui est très bizarre:
    lors que je regarde en debug mode, dans la fenêtres des espions, les propriétés de ma nouvellement créée richtextbox, elles sont celles que j'avais assignées lors de l'EXECUTION !!! Le texte que j'avais saisi est bien là dans le flowDocument, la couleur du background est bien celle que je lui avais assignée lors de l'exécution.

    Mais pourtant, lors que je cole mon UserControl sur le canvas, la richtextbox affiche ses anciennes propriétés (celles du design-time). Mon texte est perdu, la couleur du background est partie.

    C'est vraiment pénible.

    Pour info:
    Oui j'ai lu, et plusieurs fois, les limitations de sérialization XAML sur la page http://msdn.microsoft.com/en-us/library/ms754193.aspx

    Et là d'ailleurs c'est marqué :

    Realistic Scenarios for Use of XAMLWriter.Save
    While the limitations listed here are fairly substantial, there are still several appropriate scenarios for using Save for serialization.

    Rich text and flow documents: Text and all element formatting and element containment within it is preserved in the output. This can be useful for mechanisms that approximate a clipboard functionality.
    Alors forcément, cette histoire de sérialization/désérisalization doit marcher sur la richtextbox.
    Sinon, quelqu'un sait à quoi il sert ?

  2. #2
    Membre expérimenté
    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
    Points : 1 313
    Points
    1 313
    Par défaut
    pour info tu as essayé de serialiser dans un fichier pour voir ce que cela donnait ?
    souvent a la creation les problemes viennent de la definition des namspace qui ne sont pas comprise, il y a un post dans se style auquel j'avais deja repondu

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par ikeas Voir le message
    pour info tu as essayé de serialiser dans un fichier pour voir ce que cela donnait ?
    souvent a la creation les problemes viennent de la definition des namspace qui ne sont pas comprise, il y a un post dans se style auquel j'avais deja repondu
    Salut ikeas,
    Je ne vois pas le rapport entre le namespace et les propriétés de la richtextbox.

    Tout simplement : Je colle mon UserControl contenant la richtextbox sur mon canvas. Je saisis du texte dans ma richtextbox. Je la sérialize/désérialize. Le texte n'apparait plus sur la richtextbox du nouveau UserControl. Or quand je regarde en debug cette même richtextbox, celle qui n'affiche rien, eh ben il y a bien mon texte dans son FlowDocument !!

    ???

    Pareil pour le background, border etc.

    1. Il y a très clairement un gros bug concernant les UserControl.
    Lorsque je fais exactement les mêmes choses,
    mais directement sur une rcihtextbox que je colle sur mon canvas,
    sans passer par un UserControl,
    là ça marche.

    2. Tout ce que je mets en design time dans le XAML de la richtextbox se trouvant dans un UserControl est affiché bel et bien suite au process de sérialization/désérialization. Mais tout ce qui a été mis durant l'exécution a été perdu.
    En fait ce n'est pas perdu. C'est bien gardé dans l'objet mais ils ne sont pas affichés sur le canvas.

    ???

    Pénible, vraiment pénible.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par ikeas Voir le message
    pour info tu as essayé de serialiser dans un fichier pour voir ce que cela donnait ?
    J'ai regardé le code XAML généré avec XamlWriter.Save(...) sur la fenêtre des espions. Tout est bon. FlowDocument est là, le texte saisi est là etc.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Voici le code XAML généré par XamlWriter.Save(RTB) :
    Pour info : RTB est un objet de type RichTextBox.

    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
     
    "<RichTextBox IsDocumentEnabled=\"False\" BorderBrush=\"#FF8A2BE2\" BorderThickness=\"4,4,4,4\" Background=\"#FFE6E6FA\" Name=\"simpleRTB\" Width=\"200\" Height=\"200\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">
     
    <FlowDocument PagePadding=\"5,0,5,0\" AllowDrop=\"True\" NumberSubstitution.CultureSource=\"User\">
     
    <Paragraph>
     
       <Run xml:lang=\"fr-fr\"> 
     
          Ce texte est saisi durant l'exécution
     
       </Run>
    </Paragraph>
    </FlowDocument>
    </RichTextBox>"
    Voyez-vous une anomalie ?

  6. #6
    Membre expérimenté
    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
    Points : 1 313
    Points
    1 313
    Par défaut
    je me demande si c'est pas xml:lang=\"fr-fr\"
    qui mettrait la pagaille

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par ikeas Voir le message
    je me demande si c'est pas xml:lang=\"fr-fr\"
    qui mettrait la pagaille
    Non, il n'y a pas de raisons... Je vais essayer de regarde à l'occasion.

Discussions similaires

  1. Impossible de faire marcher un bean
    Par deudtens dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/04/2008, 13h14
  2. [Pygame] Impossible de faire marcher chop
    Par Neolander dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 31/03/2008, 07h05
  3. Réponses: 3
    Dernier message: 01/02/2008, 20h19
  4. Impossible de faire marcher SESSIONS_PER_USER
    Par jack554 dans le forum Oracle
    Réponses: 7
    Dernier message: 05/01/2005, 11h50

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