Que les élement d'une liste retourne automatiquement a la ligne

Résolu/Fermé
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 - Modifié le 4 mai 2019 à 15:37
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 6 mai 2019 à 21:47
Bonjour, je débute en programmation WPF et je cherche que ma ListBox qui contient une liste d'image accompagner de son bouton (qui lui est associé) retourne automatiquement à la ligne, une fois cette ligne pleine. (comme pour un wrap) Pouvez-vous m'aider ?? Merci d'avance de vos conseilles.

                <ListBox>
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <WrapPanel/>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                </ListBox>
                
                <WrapPanel HorizontalAlignment="Stretch"  >

                    <ListBox Name="List_pour_Serie">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                                <StackPanel>
                                    <Button Content="{Binding Nom}"></Button>
                                    <Image Height="250" Width="200" Source="{Binding Images}"/>
                                </StackPanel>
                            </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
                </WrapPanel>



Cordialement.
A voir également:

4 réponses

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
4 mai 2019 à 16:47
Bonjour

d'abord, merci à MadMyke d'avoir corriger ta coloration syntaxique, voir ici comment bien t'en servir pour tes prochains posts.

Si c'est ça que tu veux


        <ListBox ItemsSource="{Binding SourceDonnees}" Margin="277,31,47,39" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <Button Content="{Binding Nom}"></Button>
                        <Image Height="100" Width="100" Source="{Binding Images}"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Le scrollviewer horizontal doit être désactivé, et j'ai mis les images plus petites que toi.
0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
5 mai 2019 à 18:23
Oui c'est exactement ça ! Merci beaucoup pour votre aide !
Cordialement.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
5 mai 2019 à 18:51
De rien, pense à marquer le sujet résolu avec la roue dentée tout en haut du fil.
0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
6 mai 2019 à 19:33
Bonjour, j'aimerais un renseignement s'il vous plait... Serais-t-il possible de passer la valeur du Click dans la balise bouton grâce à un Binding ?
Merci d'avance.

Cordialement.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
6 mai 2019 à 20:20
Peux tu préciser ta question?

0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
Modifié le 6 mai 2019 à 21:15
Avec le code qui vous m'avez donnée ci-dessus, j'ai voulu ajouter un événement Click, si on le fait de la façon "habituelle" c'est à dire :

 Click="Button_Click"


Ça applique le même évènement à tout les boutons. Or je veux que chaque bouton d'image "conduit" vers une fenêtre différente. J'ai donc voulu passer les "Button_Click" par un Binding. Pour ça j'ai créer dans ma classe une nouvelle valeur.


 public string Appelation { get; set; }
        public string Description { get; set; }
        public string Images { get; set; }

        public Genre DataSource { get; internal set; }
        public String Click { get; set; } //nouvelle valeur qui permet de passer le Button_Click


Cependant cette méthode ne fonctionne pas ...
Quand je tentes de lancer l'application ça m'affiche une exception : "System.Windows.Markup.XamlParseException : ''La valeur fournie sur 'System.Windows.Data.Binding' a levé une exception.'"
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
6 mai 2019 à 21:47
Ok,
Une propriété, c'est une donnée sur l'objet.
Un évènement c'est un truc qui arrive.

Par exemple dans la vie un Verre est objet, qu'il soit vide, plein, partiellement rempli est une donnée, que ce soit de l'eau, du sirop ou de la bière en est une autre.

Par contre, qu'il tombe par terre et se casse est un évènement, qu'il se reverse en est un autre.

Une propriété ça se binde, un évènement non (enfin, ça peut, mais c'est compliqué), et surtout t'en as pas besoin.

Pour mon exemple, j'ai écrit une class Class3
    class Class3
    {
        public Class3(string LeNom, string PathImage)
        {
            Nom = LeNom;
            Images = new BitmapImage(new Uri(PathImage));
        }
        public string Nom { get; set; }

        public ImageSource Images { get; set; }
    }


Dans la méthode abonnée au click de chaque bouton, je vais déterminer de quel bouton il s'agit, puis de quel Class3 il s'agit, et en fonction afficher la bonne fenêtre
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Button but = sender as Button;
            if (but == null)
                return;//sender n'était pas un bouton, il y a erreur => on s'en va

            Class3 source = but.DataContext as Class3;
            if (source == null)
                return;//le bouton n'est pas un bouton bindé sur un objet Class3, il y a erreur => on s'en va

            //option  1, on choisit en fonction de l'objet, avec son nom par exemple
            switch(source.Nom)
            {
                case "Patate 1":
                    //ici le code pour afficher la fenêtre correspondant Patate 1
                    break;
            }

        }
0