[WPF] Mettre des images dans un treeview

Résolu
Spixy Messages postés 5 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 15 mai 2009 - 22 avril 2009 à 11:01
Spixy Messages postés 5 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 15 mai 2009 - 24 avril 2009 à 09:51
Bonjour à tous !

Voilà, en créant ma propre classe de ImageTreeViewItem qui hérite de TreeViewItem, j'ai réussi à faire que chaque "branche" de mon arbre ait une image à gauche de son libellé. Seulement, je voudrais pouvoir mettre plusieurs images les unes à la suite des autres pour chaque "branche", et non plus une seule... Quelqu'un pourrait-il m'aider s'il vous plaît ?

Merci d'avance !

Spixy.

2 réponses

Spixy Messages postés 5 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 15 mai 2009
24 avril 2009 à 09:51
Bonjour !

J'ai fini par trouver une solution, je poste le code au cas où ça intéresserait quelqu'un !

class ImageTreeViewItem : TreeViewItem
    {
        TextBlock text;
        StackPanel stack;

        public ImageTreeViewItem()
        {
            stack = new StackPanel();
            stack.Orientation = Orientation.Horizontal;
            Header = stack;
            text = new TextBlock();
            text.VerticalAlignment = VerticalAlignment.Center;
            stack.Children.Add(text);
        }

        public string Text
        {
            set { text.Text = value; }
            get { return text.Text; }
        }

        public ImageSource Image
        {
            set
            {
                Image img = new Image();
                img.VerticalAlignment = VerticalAlignment.Center;
                img.Margin = new Thickness(0, 0, 0, 0);
                img.Source = value;
                img.Height = 17;
                stack.Children.Insert(0, img);
            }
        }

        public static System.Windows.Media.Imaging.BitmapImage CreateImage(string path)
        {

            System.Windows.Media.Imaging.BitmapImage myBitmapImage = new System.Windows.Media.Imaging.BitmapImage();
            myBitmapImage.BeginInit();
            myBitmapImage.UriSource = new Uri("/Images/" + path, UriKind.Relative);
            myBitmapImage.EndInit();
            return myBitmapImage;          
        }
    }

Il suffisait donc de mettre un StackPanel à la place d'une image, et dans le code où j'appelle cette méthode je fais ceci :

ImageTreeViewItem itemEspace = new ImageTreeViewItem();
itemEspace.Text = espace.Libelle;
itemEspace.Image = ImageTreeViewItem.CreateImage("Moteur.JPG");
itemEspace.Image = ImageTreeViewItem.CreateImage("Visuel.JPG");
itemEspace.Image = ImageTreeViewItem.CreateImage("Auditif.JPG");

Sachant que ces images sont contenues dans un dossier "Images" à la racine de mon projet, et que dans leurs propriétés j'ai défini leur Build Action sur "Content" et leur Copy to output directory sur "Copy if newer".

Voilà !
3
Spixy Messages postés 5 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 15 mai 2009
22 avril 2009 à 13:42
J'ai oublié de préciser que je code en C# et que j'utilise WPF avec .Net 3.5.
0
Rejoignez-nous