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 :

Utiliser une image non insérée dans le projet


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut Utiliser une image non insérée dans le projet
    Bonjour tout le monde,

    J'aurais besoin d'aide pour la réalisation d'une interface graphique chargée une fois mon application lancée.

    Le principe de mon application est de proposer une interface graphique fixe contenant principalement des barres d'outils. Le reste de l'interface est un simple contrôle de type Grid vide (l'essentiel de ma fenêtre).
    L'utilisateur a alors accès à une fonction lui permettant de charger un fichier de type .xaml chargé à la volé par la fonction XamlReader.Load(). Ce fichier contient quand à lui un conteneur de type Grid avec des sous-éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Grid
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="Auto" Width="Auto">
    ...
    </Grid>
    Je sais d'ores et déjà que je vais avoir pas mal de difficultés pour réaliser mes bindings et autres liaisons.

    Mais pour le moment je souhaiterais être capable de déclarer des images dans mon fichier .xaml chargé par l'utilisateur sans pour autant les avoir incluses à mon projet lors de sa compilation. Le but serait de placer les images dans le même dossier que mon fichier .xaml par exemple.

    J'ai beau chercher sur google, je ne trouve rien, à part en incluant mes images à une assembly puis en chargeant celle-ci du coté du code-behind. Mais le but pour moi serait de pouvoir tout faire directement coté XAML.

    Est ce que ce cas est envisageable avant de voir comment le faire ? Car j'ai bien l'impression que ce n'est pas possible malheureusement ...

  2. #2
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    C'est parfaitement possible. Mais il faudrait que tu déplace les images dans le même dossier que ton application.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Hummm mouai ... pas très pratique tout ça ...

    Qu'elle est la différence entre utiliser les images dans le même dossier que mon exécutable ou bien les placer dans un sous dossier "Images" par exemple ?

    Je ne vois par pourquoi cela fonctionnerait plus dans un cas que dans l'autre ...

  4. #4
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Si les images sont à côtés de ton exécutable, tu à juste à mettre des url du type MonImage.jpg.

    Sinon, tu va t'embrouiller pour situer ton image par rapport à ton aaplication.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    J'ai essayé avec un fichier de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <Grid
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="Auto" Width="Auto">
     
    	<Image Margin="192,23,203,0" Name="image1" Source="test.png" /> 
    </Grid>
    et mon image test.png placée dans le même dossier que mon fichier .xaml, tous deux dans le dossier de mon exécutable compilé en debug.

    Mais mon image ne s'affiche pas.

    La même chose fonctionne si mon image est au préalable incluse à mon projet et compilée pour former mon exécutable.

  6. #6
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Regarde les propriétés de l'objet et regarde si elle est incluse en tant que ressource et si elle est copiée dans le répertoire de sortie.

    Car il me semblait qu'il n'était pas nécessaire d'inclure une image pour l'utiliser.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  7. #7
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Points : 78
    Points
    78
    Par défaut
    Si tu veux pouvoir utiliser et afficher une image qui ne soit pas embarqué dans une assembly, il te faut quand même la rajouter à ton projet mais en faisant gaffe de sélectioner 'Content' au lieu de 'Resource' dans la partie titré 'Action de génération'.

    Ensuite tu dois rajouter l'attribut 'AssemblyAssociatedContentFile' dans les metadata de ton assembly pour dire à ton appli que il possède un fichier contenu qui lui est rattaché.

    Pour t'aider :

    Pack Uri
    AssemblyAssociatedContentFileAttribute

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Merci pour vos réponses.

    Seulement je ne peux pas utiliser la propriété 'Action de génération' puisque je ne connais pas à l'avance les images qui seront présentes dans la partie dynamique de mon application.

    Le principe est d'envoyer à l'utilisateur le fichier source XAML avec les images associées que l'utilisateur chargera alors dans le logiciel par une boite de dialogue ouvrir (où il sélectionnera le fichier XAML qu'il aura précédemment téléchargé). A terme j'envisage de placer tous les fichiers dans une archive que l'utilisateur sélectionnera dans la boite de dialogue ouvrir.

    Avez vous une idée pour moi ?

  9. #9
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Sinon tu peux passer par le code-behind : quand tu chargeras de nouvelles images, tu mettras à jour les sources de tout les composants Images de ton interface.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    C'est la aussi ce que je voudrais éviter de faire ...

    Le but serais de vraiment séparer la partie UI et la partie métier. Mon UI dans mon fichier XAML (avec ses images) et un fichier XML qui contient mes données métier.

    Hors là si je passe par mon code-behind, je vais devoir mettre associé mon image depuis mon fichier XML.

    A moi qu'ensuite je reparse mon fichier XAML à la recherche des images ...

    Je pensais qu'il existé plus simple pour ce genre de problématique, surtout en .Net ...

  11. #11
    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 Gigi070 Voir le message
    Hors là si je passe par mon code-behind, je vais devoir mettre associé mon image depuis mon fichier XML.
    Il te faut donc un intermédiaire entre ton UI et ton métier, ce que l'on appelle le ViewModel avec WPF/Silverlight: regarde du coté du pattern MVVM

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Je me suis déjà tourné du coté du pattern MVVM, puisqu'il sépare l'UI avec la View et les Datas avec le Model. Mais sa découverte est assez complexe pour moi qui ne suis pas expérimenté sur .Net et C#...
    Mais un peu de lecture associé avec le MVVM Light ToolKit devrait me permettre de m'en sortir. Surtout que durant les TechDays 2010 MVVM a prit une place très importante ce qui démontre bien son utilité.

    En ce qui concerne mes images, j'ai trouvé une autre solution.

    Pour ma page dynamique à charger dans mon application, j'utilise un contrôle utilisateur que je place dans une bibliothèque de classe. Ensuite par Reflection je parcours ma DLL puis instancie mon contrôle utilisateur directement. Les images sont ainsi directement incluses dans ma DLL.
    Ainsi je conserve ma séparation entre UI et Data. J'espére que ma solution est la bonne et que la taille de la DLL ne deviendra pas un problème en fonction des images qu'elle embarquera.

    Un autre avantage de cette solution est d'éviter certains problèmes de compatibilité que j'ai rencontré avec le XamlReader.Load() qui ne supporte pas les balises x:Class="" par exemple.
    Et puis avec C# 4.0 et le type dynamic qui va arriver, il y aura surement plein d'autres opportunités à saisir avec la Reflection

    Il me reste maintenant à m'attaquer aux Bindings et à MVVM pour vérifier qu'il n'y a pas de problème de compatibilité, mais je suis plutôt confiant ^^


    Merci pour votre aide et en espérant que mon cas puisse en aider d'autres !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/10/2013, 18h00
  2. Peut-on utiliser une source GPL V3 dans un projet ?
    Par maxwel56 dans le forum Android
    Réponses: 1
    Dernier message: 04/08/2011, 13h17
  3. Utiliser une image de fond dans une application
    Par Haiden dans le forum Débuter
    Réponses: 7
    Dernier message: 14/04/2011, 16h29
  4. Utiliser une méthode non-static dans une méthode static
    Par mcfly37 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 18/08/2010, 11h41
  5. utiliser une DLL 2.0 dans un projet 1.1
    Par Spoonnny dans le forum Windows Forms
    Réponses: 6
    Dernier message: 14/01/2008, 13h22

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