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 :

Comment mettre une grille comme Template d'un ListBox ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut Comment mettre une grille comme Template d'un ListBox ?
    Bonjour tout le monde,
    j'ai une listbox qui possède une liste d'opérateurs. Je souhaite les afficher dans la ListBox avec une présentation de grille et non de panel.
    Le problème est que je n'arrive pas à définir la ligne pour chaque item.
    D'ailleurs dans le code exemple que je mets en dessous, les items devraient se mettre dans la ligne N°2 mais en fait sont représentés dans la première ligne, ça ne fonctionne donc pas.

    Merci pour votre aide, je cherche sur internet mais ne trouve pas d'exemple comme le mien, on dirait que tout le monde ne met que des panels en DataTemplate d'un ListBox.
    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
    <ListBox ItemsSource="{Binding Source={StaticResource odpOperateur}}">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                </Grid.RowDefinitions>
                            </Grid>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <RadioButton Content="{Binding}"
                                         GroupName="gOperateur"
                                         IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"
                                         Grid.Row="2"/>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

  2. #2
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    J'ai trouvé une solution, mais elle n'est pas en XAML, elle est en C#, c'est dans l'événement Load que je redéfinie la position de chaque item :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                for (int i = 0; i < lbOperateur.Items.Count; i++)
                {
                    ListBoxItem item = (ListBoxItem)lbOperateur.ItemContainerGenerator.ContainerFromItem(lbOperateur.Items[i]);
                    Grid.SetRow(item, i);
                }
            }
    Ca fonctionne à l'exécution, par contre, du coup, dans le Designer, cela ne s'affiche toujours pas convenablement.

    Si vous avez une solution en XAML, je suis preneur, merci.

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    Ce que essayes de faire me fait bcp penser à un ListView en mode GridView ou encore à une DataGrid. Il y a une raison qui fait que tu veux rester avec un ListBox ?
    www.japf.fr mon blog sur WPF et .Net

  4. #4
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Je n'ai pas de préjugés sur d'autres composants, j'utilise juste une ListBox car c'est elle qui avait déjà été utilisée dans d'autres fenêtres.

    Mais en fait, je ne sais pas utiliser une ListView et afficher les éléments dedans comme dans une Grid, as-tu un exemple simple à me présenter, stp ?

  5. #5
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Bonjour,

    j'ai regardé un peu plus en avant un exemple d'utilisation d'un ListView mais ça ne fait pas ce que je souhaite.
    Un Listview permet d'afficher des items les uns en dessous des autres comme dans un panel et permet d'afficher les propriétés de ces items dans différentes colonnes d'une grille.

    Ce que je souhaite c'est que ces items soient affichés non pas dans un panel mais dans une grille afin que leur espacement vertical soit proportionnel et que le dernier élément soit tout en bas.

    En fait, je cherche à faire comme une liste de RadioButton dans un RadioGroup.

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par WebPac Voir le message
    En fait, je cherche à faire comme une liste de RadioButton dans un RadioGroup.
    Ben, pour faire ca en WPF, on utilise une ListBox sur laquelle on modifie sont template et le template des items.

    Donc, tu peux sans doute y arriver de la même manière...

  7. #7
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Est-ce qu'en utilisant un WrapPanel dans le ItemsPanelTemplate, tu ne peux pas obtenir ce que tu veux ?

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                        <Style TargetType="ListBox" >
                          <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
                          <Setter Property="ItemsPanel">
                            <Setter.Value>
                              <ItemsPanelTemplate>
                                <WrapPanel Width="200" /> <!-- largeur en dur pour le test et ne pas voir la ScrollBar horizontale -->
                              </ItemsPanelTemplate>
                            </Setter.Value>
                          </Setter>
                        </Style>

  8. #8
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Merci pour vos aides.

    @ Thomas Lebrun : en effet en modifiant les différents template, je dois y arriver, c'est d'ailleurs la solution que je cherche à obtenir, le seul problème qu'il me reste est d'arriver à définir la ligne dans la grille pour chacun des items.
    J'ai trouvé comment le faire en C# mais pas encore en XAML.

    @ binoo : désolé mais ça ne fait pas ce que je cherche à obtenir, je souhaite avoir une grille et non un panel dans l'ItemsPanelTemplate.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    je sais pas si j'ai bien compris
    mais tu veux mettre une ligne sous chaque item de ta liste ou c'est pas ca sinon c'est relativement simple en modifiant les style avec blend
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  10. #10
    Membre habitué Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 183
    Points
    183
    Par défaut
    Bonjour,

    Je suis pas sur d'avoir bien compris non plus, mais en utilisant une UniformGrid, avec une seule colonne ?

    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
    <Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Page.Resources>
    <XmlDataProvider x:Key="odpOperateur" XPath="Operateurs/*">
    <x:XData>
    <Operateurs xmlns="">
    <Operateur Name="Operateur0" />
    <Operateur Name="Operateur1" />
    <Operateur Name="Operateur2" />
    <Operateur Name="Operateur3" />
    <Operateur Name="Operateur4" />
    <Operateur Name="Operateur5" />
    <Operateur Name="Operateur6" />
    <Operateur Name="Operateur7" />
    <Operateur Name="Operateur8" />
    <Operateur Name="Operateur9" />
    </Operateurs>
    </x:XData>
    </XmlDataProvider>
    </Page.Resources>
    <Grid> 
    <ListBox ItemsSource="{Binding Source={StaticResource odpOperateur}}">
    <ListBox.ItemsPanel>
    <ItemsPanelTemplate>
    <UniformGrid Columns="1" />
    </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
    <DataTemplate>
    <RadioButton Content="{Binding XPath=@Name}"
    GroupName="gOperateur"
    IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"
    Grid.Row="2"/>
    </DataTemplate>
    </ListBox.ItemTemplate>
    </ListBox>
    </Grid>
    </Page>
    

  11. #11
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Salut,

    désolé je n'utilise pas Blend, j'utilise juste Visual Studio, je suis plus développeur côté code C# que designer mais je m'éforce d'avoir les 2 casquettes.

    Mon soucis n'est pas d'afficher les éléments en RadioButton, ni de changer le Template du ListBox afin de mettre un Grid.
    Mon soucis est que chaque item dans la ListBox soit sur la même ligne, la ligne 0. Je voudrais arriver à trouver comment spécifier en XAML que chaque élément doit se situer en dessous les uns des autres.
    J'ai déjà trouvé la solution en C# dans l'évément Load de la form, ça fonctionne après compilation, mais pas en mode design dans Visual Studio.

    Si vous savez comment faire, je suis intéressé, merci.

  12. #12
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut

    C'est bien une UniformGrid dont j'avais besoin dans l'ItemsPanelTemplate.
    Ca donne exactement ce que je cherchais à obtenir, je ne connaissais pas ce composant.

    Merci à tout le monde, bye.

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

Discussions similaires

  1. [JBouton] Comment mettre une image sur un bouton ?
    Par Kyti dans le forum Composants
    Réponses: 6
    Dernier message: 11/03/2005, 16h08
  2. comment construire une interface comme une pomme...
    Par redanium dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/10/2004, 15h35
  3. [Info]Comment mettre une servlet sur le web?
    Par fred9510 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 15/08/2004, 16h40
  4. [C#] Comment mettre une ligne en couleur dans mon DataGrid ?
    Par vandeyy dans le forum Windows Forms
    Réponses: 7
    Dernier message: 19/07/2004, 10h03
  5. Comment mettre une image en fond de JFrame
    Par marc26 dans le forum Débuter
    Réponses: 3
    Dernier message: 19/01/2004, 17h57

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