none
Boutons dans une listBox RRS feed

  • Discussion générale

  • Bonjour

    J'affiche une liste d'items dans une listebox.

    Lorsque un item est sélectionné, je voudrais faire apparaître un bouton à coté de son nom (uniquement lorsque l'item est sélectionné) - le bouton permettant d'ajouter l'item aux favoris.

    Voir l'application store musique de W8 par exemple, lorsqu'un morceau est sélectionné, des boutons "play" et "ajouter à" apparaissent a coté du nom.

    Merci!

                    <ListBox>
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding code}" Width="50" HorizontalAlignment="Left"/>
    
                                    <StackPanel Orientation="Horizontal" Width="400">
                                        <TextBlock Text="{Binding name}" Margin="10,0" HorizontalAlignment="Left"/>
                                        <Button x:Name="Button_AddFav" Content="+" Click="Button_AddFav_Click" Visibility= "Collapsed">
                                    </StackPanel>
                                    <TextBlock Text="{Binding type}" Width="150" HorizontalAlignment="Left"/>
                                </StackPanel>
                                
                            </DataTemplate>
    
                        </ListBox.ItemTemplate>
    
                    </ListBox>
    
    
    

    vendredi 16 janvier 2015 19:35

Toutes les réponses

  • Bonjour

    Il vous suffit de créer/d'utiliser un Converter (IValueConverter) par exemple un BooleanToVisibilityConverter et de binder votre bouton à une propriété boolean :

    Visibility={Binding IsSelected, Converter={StaticResource boolToVisibilityConverter}}

    Et vous ajoutez une prop IsSelected de type Booleen.

    Ou vous créez un autre converter genre NullToVisibilityConverter 


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    samedi 17 janvier 2015 08:36
  • Bonjour

    Je ne trouve pas de solution.

    Je cherche à faire apparaître un bouton sur la ligne d'un item sélectionné dans une listbox, comme cet exemple (non W8) : example_non_W8

    FindAncestor n'existant pas pour une Store App, ce post précise "you can't access ListViewItem properties in DataTemplate so you can't react on selection change elegantly".

    Je précise que ceci ne fonctionne pas:

     <Button x:Name="AddFav" Click="AddFav_Click" Visibility="{Binding Path=isSelected, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource BoolToVisi}}">

    Une idée ?

    Cordialement


    dimanche 18 janvier 2015 16:02
  • Bonjour

    Je complète la réponse de Richard car je ne l'avais pas bien comprise en première lecture...

    Il me semble que la solution indiquée consiste à ajouter une propriété isSelected à chaque objet bindé et de mettre à jour cette propriété avec du code sur l'event SelectionChanged.

    Exemple j'ai une classe "Article" avec des propriétés "Code", "Nom", "Type". La solution consiste à rajouter une propriété "isSelected" et de la mettre à jour avec su code. On peut ensuite faire apparaître simplement le bouton avec un converter effectivement.

    Cette solution a le mérite de fonctionner...

    Cordialement,

    Charles

     

    dimanche 8 février 2015 20:15
  • Bonjour,

    Comme MR Richard Clark a dit

    lundi 9 février 2015 10:51
  • Je ne sais pas pourquoi je ne peux marquer ce topic comme résolu...
    mercredi 18 février 2015 23:13