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 :

[WPF] Image et assembly


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut [WPF] Image et assembly
    Bonsoir à tous,

    j'ai un problème de binding image un peu complexe

    Voila l'organisation de mon projet :
    - Une DLL contenant une classe Plugin.
    - Une DLL contentnat une classe hérités de Plugin.
    - Un exécutable Interface.exe qui charge dynamiquement les plugins.

    Ma classe plugin contient entre autre :

    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
            #region Image
            public BitmapImage Image 
            {
                get
                {
                    return (this._Image);
                }
                set
                {
                    this._Image = value;
                    this.OnPropertyChanged("Image");
                }
            }
            private BitmapImage _Image = null;
            #endregion
    Dans le constructeur de ma classe hérité j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this.Status = MenuButton.StatusType.Disconnected;
                this.Image = new BitmapImage(new Uri("/Ressources/Image.png", UriKind.Relative));
    Le problème :
    Dans l'exécutable je bien des champs sur la classe hérité de Plugin, le texte et autres propriété fonctionne, j'ai cependant un problème par rapport à l'image, l'image est contenu dans la DLL et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Image = new BitmapImage(new Uri("/Ressources/Image.png", UriKind.Relative));
    ne fonctionne pas, comment puis-je faire ?

    Merci d'avance.

    Cordialement,
    NeoKript

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Essaies avec cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Image = new BitmapImage(new Uri("pack://application:,,,/ReferencedAssembly;component/Ressources/Image.png"));
    Pour plus d'information sur la création de cette URI voir la doc msdn :
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

    Il faut aussi penser à définir ton image comme une ressource (clic droit sur l'image -> propriété -> build action = Resource)

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par binoo Voir le message
    Salut,

    Essaies avec cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Image = new BitmapImage(new Uri("pack://application:,,,/ReferencedAssembly;component/Ressources/Image.png"));
    Pour plus d'information sur la création de cette URI voir la doc msdn :
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

    Il faut aussi penser à définir ton image comme une ressource (clic droit sur l'image -> propriété -> build action = Resource)
    Salut, Merci pour ta réponse.
    L'image est déjà en ressource.

    J'avais déjà test ceci, mais ca ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Image = new BitmapImage(new Uri("pack//application:,,,/Desktop;component/Ressources/Image.png", UriKind.Relative));
    Edit :
    Je tiens à préciser que la dll est charger dynamiquement par réflexion et non référencé dans le projet.

  4. #4
    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
    La DLL que tu charges s'appelle Desktop ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    La DLL que tu charges s'appelle Desktop ?
    Salut, Desktop c'est le nom du namespace de la DLL que je charge dynamiquement.

    Mais sur MSDN, ils disent qu'on peut faire cela pour des assembly référencées or quand on charge dynamiquement, l'assembly n'est pas référencée non ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Voilà le code complet au cas ou :

    Plugin.dll

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    public class Plugin : ViewModelBase
        {
            #region Name
            private String _Name = "Plugin";
            public String Name 
            {
                get
                {
                    return (this._Name);
                }
                set
                {
                    this._Name = value;
                    this.OnPropertyChanged("Name");
                }
            }
            #endregion
            #region Image
            public BitmapImage Image 
            {
                get
                {
                    return (this._Image);
                }
                set
                {
                    this._Image = value;
                    this.OnPropertyChanged("Image");
                }
            }
            private BitmapImage _Image = null;
            #endregion
            #region Notification
            private Int32 _Notification = 0; 
            public Int32 Notification 
            {
                get
                {
                    return (this._Notification);
                }
                set
                {
                    this._Notification = value;
                    this.OnPropertyChanged("Notification");
                }
            }
            #endregion
            #region Status
            private MenuButton.StatusType _Status = MenuButton.StatusType.None;
            public MenuButton.StatusType Status 
            {
                get
                {
                    return (this._Status);
                }
                set
                {
                    this._Status = value;
                    this.OnPropertyChanged("Status");
                }
            }
            #endregion
    }
    Cinema.dll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Cinema : Plugin
        {
            public Entry()
            {
                this.Name = "Cinéma";
                this.Status = MenuButton.StatusType.Disconnected;
                this.Image = new BitmapImage(new Uri("pack//application:,,,/Cinema;component/Ressources/Cinema.png", UriKind.Relative));
            }
     
        }
    Interface.exe
    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
    29
     
    public void LoadPlugins()
    {
    DirectoryInfo Dir = new DirectoryInfo(Directory.GetCurrentDirectory());
                String Content = String.Empty;
                foreach (FileInfo File in Dir.GetFiles("*.Plugin.dll"))
                {
                    Assembly Assemb = Assembly.LoadFrom(File.FullName);
                    foreach (Type Type in Assemb.GetTypes())
                    {
                        object Object = Assemb.CreateInstance(Type.FullName);
                        Plugin Plugin = Object as Plugin;
                        if (Plugin != null)
                        {
                            MenuButton MB = new MenuButton();
                            MB.DataContext = Plugin;
                            Binding BindingName = new Binding("Name");
                            MB.SetBinding(MenuButton.TextProperty, BindingName);
                            Binding BindingImage = new Binding("Image");
                            MB.SetBinding(MenuButton.ImageProperty, BindingImage);
                            Binding BindingNotification = new Binding("Notification");
                            MB.SetBinding(MenuButton.NotificationProperty, BindingNotification);
                            Binding BindingStatus = new Binding("Status");
                            MB.SetBinding(MenuButton.StatusProperty, BindingStatus);
                            this.Stack.Children.Add(MB);
                        }
                    }
                }
            }
    Voilà donc Cinema.dll est charger dynamiquement par interfaces.exe et Plugin.dll est référencé dans cinema.dll et Interface.exe.

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

Discussions similaires

  1. [WPF] Image ne s'affiche qu'en preview.
    Par PokeRstarrr dans le forum Développement Web avec .NET
    Réponses: 1
    Dernier message: 04/06/2014, 10h51
  2. [WPF] <image source="" />
    Par Gregory.M dans le forum Windows Presentation Foundation
    Réponses: 14
    Dernier message: 04/03/2010, 16h01
  3. Contrôle WPF Image et application des effets
    Par guismo45 dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 10/12/2008, 21h49
  4. [3.0][WPF][C#] Images vectorielles
    Par psyclik dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 16/11/2006, 10h21
  5. [Recherche] Recherche un logiciel pour assembler des images
    Par Furius dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 29/12/2005, 18h03

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