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.Load() et XAML code-behind.


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 39
    Par défaut XAMLReader.Load() et XAML code-behind.
    Bonjour à tous,

    Je travaille en ce moment sur le chargement dynamique d'un fichier XAML grâce à la méthode XAMLReader.Load() mais un problème (problème tout a fait logique...) survient lorsque ce fichier XAML possède du code-behind... (par example avec x:Class).

    Etant donné que le XAML n'est pas compilé je ne peux pas faire de référence de ce genre, et mon XAMLReader me retourne une exception.

    A savoir que les controls définis dans ce fichier XAML sont initiallement vide de toutes données (par example grille totallement vide). Je dois donc parcourir le fichier XAML, trouver les controls, les initialiser et mettre a jour mon interface utilisateur (c'est d'ailleurs pour cela que j'utilisais XAMLReader.Load()).

    Malheureusement je n'ai aucune idée pour contourner ce problème, peut-être en avez vous ?

    Par avance, merci !
    Sacoum.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    tu peux toujours compiler dynamiquement le code behind, en utilisant le namespace System.CodeDom.Compiler

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 39
    Par défaut
    Je ne suis pas sûr qu'en compilant dynamiquement le code-behind, mon problème sera réglé.

    L'exception retournée étant:
    "'Class' attribute does not exist in XML namespace 'http://schemas.microsoft.com/winfx/2006/xaml' namespace."

    Je pense que XAMLReader.Load n'accepte tout simplement pas cet attribut et que la compilation du code-behind ne changera pas. Non ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Essaie avec la surcharge de XamlReader.Load qui prend en paramètre un Stream et un ParserContext. Dans le ParserContext, tu peux spécifier les namespaces

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    J'avais déjà été confronté à ce genre de problème sans trouver de solutions

    A partir du moment où il y a x:Class, il est nécessaire d'avoir un fichier de code behind mais via le XamlReader, ca ne passe pas.
    Sans mettre le x:Class, ca marche mais dans ce cas, il est nécessaire d'accéder à chacun des objets du XAML, une fois compilé, pour s'abonner aux évènements.....

  6. #6
    Membre averti
    Inscrit en
    Août 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 39
    Par défaut
    Je viens d'essayer avec le ParserContext, mais rien ne change. L'attribut "Class" ne passe pas.

    Je vais "re-expliquer" ma situation, peut-être que ce XAMLReader.Load() n'etait pas un bon départ (en tout cas le final est loupé ^^).

    J'ai initialement un fichier XAML qui décrit mon UI: quels controls seront affichés (boutons, grilles, textbox, etc...). Dans ce fichier XAML aucune donnée n'est présente c'est a dire que tous les champs sont vides (grilles vides, textbox vide, etc...). Lorsque mon appli se lance tous ces controls doivent être initialisés.

    Mon idée était donc de charger dynamiquement ce fichier XAML via XAMLReader.Load() et de parcourir l'objet retourné à partir de la racine, pour chaque control trouvé, l'initialiser, et mettre ainsi a jour l'objet initial et enfin l'afficher.

    Mais problème avec ce x:Class pour mes CustomControl.

  7. #7
    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
    j'ai une solution a te proposer mais je sais pas ce quelle vo
    tu bind l'ensemble des propriete sur un dictionnaire type empty (données vide mais presente pour la definition)
    des les merge dictionnary de ton apply
    puis tu charge un dictionnaire qui contient les données et tu le met en premiere position des merges directory
    (tu reprend le dico vide et tu affecte les valeurs)

    le binding va faire le reste

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par sacoum Voir le message
    Mon idée était donc de charger dynamiquement ce fichier XAML via XAMLReader.Load() et de parcourir l'objet retourné à partir de la racine, pour chaque control trouvé, l'initialiser, et mettre ainsi a jour l'objet initial et enfin l'afficher.
    Ca me semble pas mal comme idée

    Mais problème avec ce x:Class pour mes CustomControl.
    Tu as essayé enlevant cet attribut ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. code XAML équivalent au code Behind d'un binding
    Par djmic dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 12/08/2011, 16h30
  2. XAML - Récupérer une instance créée en code-behind
    Par jacquesprogram dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 09/09/2009, 15h35
  3. WPF, Win32 app, XAML et code-behind?
    Par sacoum dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 27/05/2008, 10h06
  4. Réponses: 5
    Dernier message: 24/05/2005, 12h31
  5. [VB.NET] Création d'un tableau en code behind
    Par netr dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/05/2004, 10h02

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