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 :

Problème Binding Image


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Par défaut Problème Binding Image
    Salut à tous,

    J'ai un petit soucis au niveau du Binding d'une image :
    J'ai créé un controle utilisateur tout bête qui contient une Image en fond. Quand je place ce contrôle dans une application, je voudrais, à l'aide d'une combobox qui récupère une liste de fichier contenu dans un dossier, changer le chemin de l'image.

    Coté control

    En xaml j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Image x:Name="Photo" >
    	   <Image.Source>   
    	        <BitmapImage x:Name="BitImage" UriSource="{Binding Path = ImageSource}"/>
               </Image.Source>
    </Image>
    Dans le fichier .cs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            public static readonly DependencyProperty ImageProperty = DependencyProperty.Register("ImageSource", typeof(String), typeof(UserControl1));
     
            public String Source
            {
                get { return (String)GetValue(ImageProperty); }
                set { SetValue(ImageProperty, value); }
            }
    Coté application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //Partie qui récupère les chemins des images
    string[] Files;
     
                Files = Directory.GetFileSystemEntries("C:/Image"); // Repertoire des fichiers
                int Filecount = Files.GetUpperBound(0) + 1;
                for (int i = 0; i < Filecount; i++)
                {
                    ComboImage.Items.Add(Files[i]);           
                }
     
    //Pour mettre le chemin d'accès dans ma propriété
    ControlTest.Source = ComboImage.Text;
    Cela ne marche pas et je n'arrive pas à comprendre pourquoi. Quelqu'un pourrait-il m'éclairer ?
    Si je me suis mal fait comprendre, faites le moi savoir.

    PS: c'est mon premier post sur ce forum, désolé si c'est mal présenté

  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
    Oula, je comprends pas trop ce que tu as fait... La dependency property s'appelle ImageProperty, la propriété elle-même Source, et tu fais le binding sur ImageSource

    Par convention, la dependency property qui correspond à une propriété "Toto" s'appelle "TotoProperty". Je crois que c'est même obligatoire pour qu'elle soit gérée correctement par le binding.

    Dans ton binding en XAML, il faut mettre comme Path le nom de la propriété (sans le suffixe Property).

    Et pour que le binding fonctionne, il faut définir le DataContext au UserControl lui même (this.DataContext = this dans le constructeur).

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Par défaut
    J'ai fais tout ce que tu m'as dis et aucun changement. Franchement je sais pas d'où peut venir le problème, j'ai réussi à faire un binding sur l'angle de rotation d'un rectangle et ça marchait parfaitement. N'y aurait-il pas un autre moyen pour parvenir à mes fins ?

    Sur ce merci quand même pour ta réponse, j'ignorais les histoires de noms avec les dependency property

  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
    ah oui, y a un autre truc qui va pas... la propriété UriSource n'est pas une string mais une Uri, il faut donc modifier le type dans la déclaration de la propriété

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Par défaut
    Ben j'y avait pensé mais ça me fait la même chose : rien.
    Tout compile comme il faut, pas d'erreur, mais mon image ne s'affiche pas ... y a un mystère la dessous ... ou comme je suis une brèle en développement, j'arrive à rien ^^

    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
    Control :
    C# :
     
    public Uri Image
            {
                get { return (Uri)this.GetValue(ImageProperty); }
                set { this.SetValue(ImageProperty, value); }
            }
     
            public static readonly DependencyProperty ImageProperty = DependencyProperty.Register("Image", typeof(Uri), typeof(UserControl1));
     
    XAML :
     
    <Image.Source>   
    	        <BitmapImage UriSource="{Binding Path = Source}"/>
    	      </Image.Source>
    		</Image>
    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
    Appli :
     
                string[] Files;
     
                Files = Directory.GetFileSystemEntries("C:/Image"); // Repertoire des fichiers
                int Filecount = Files.GetUpperBound(0) + 1;
                for (int i = 0; i < Filecount; i++)
                {
                    ComboImage.Items.Add(Files[i]);
                }
            }
     
            private void ComboImage_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                Uri Adresse = new Uri(ComboImage.SelectedItem.ToString());
                userControl1.Image = Adresse;
            }
    Voila le code avec toute les modifs faites. Si jamais ça peut aider ...

  6. #6
    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
    Dans la fenêtre Output de Visual, tu vois pas des erreurs de binding à l'exécution ?

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

Discussions similaires

  1. Problème avec binding image wpf c#
    Par cocobelle89 dans le forum C#
    Réponses: 2
    Dernier message: 23/04/2013, 11h44
  2. problème affichage image
    Par thealpacino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 30/05/2005, 13h56
  3. [javascript] problème insertion image
    Par Pwill dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/05/2005, 16h12
  4. problème dessiner image dans fenêtre
    Par raoulman dans le forum MFC
    Réponses: 5
    Dernier message: 13/12/2004, 15h44
  5. Problème d'image avec DirectX9 et c# VS.net...
    Par lilly_lilly dans le forum DirectX
    Réponses: 1
    Dernier message: 02/03/2004, 14h02

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