80 votes

Comment puis-je obtenir une barre de défilement verticale dans mon ListBox?

Dans l'exemple ci-dessous j'ai une ListBox avec des dizaines de noms de police en elle.

J'aurais pensé qu'il serait automatiquement une barre de défilement verticale sur elle de sorte que vous pouvez sélectionner n'IMPORTE quelle police, et pas seulement le premier dans la liste, mais il ne le fait pas.

J'ai donc ajouté un "ScrollViewer" et qui met en place une "zone de défilement" sur la droite, mais il n'y a pas de barre de défilement dans la zone de défilement de sorte que vous pouvez les faire défiler (!).

Pourquoi n'est-ce pas une barre de défilement automatique et comment puis-je le forcer à avoir une barre de défilement?

<StackPanel Name="stack1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="2*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <ScrollViewer>
            <ListBox Grid.Row="0" Name="lstFonts" Margin="3"  ItemsSource="{x:Static Fonts.SystemFontFamilies}"/>
        </ScrollViewer>
    </Grid>
</StackPanel>

141voto

JaredPar Points 333733

Le problème avec votre solution est que vous mettez une barre de défilement autour d’un ListBox où vous souhaitez probablement le placer à l’intérieur du ListBox.

Si vous souhaitez forcer une barre de défilement dans votre contrôle ListBox, utilisez la propriété jointe ScrollBar.VerticalScrollBarVisibility.

 <ListBox 
    ItemsSource="{Binding}" 
    ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>
 

Définir cette valeur sur Auto fera apparaître la barre de défilement selon les besoins.

28voto

yossharel Points 609

ListBox contient déjà ScrollViewer. Par défaut, l' ScrollBar s'affichera lorsqu'il y a plus de contenu que dans l'espace.

Afin de calculer cette condition, la taille doit être connue. Assurez-vous que votre zone de liste taille. Vous n'avez pas à définir la taille explicitement sur la zone de liste, la taille peut venir de l'hôte panneau.

Dans le cas où l'hôte panneau vertical StackPanel et vous souhaitez VerticalScrollBar vous devez régler la Hauteur sur ListBox lui-même.

17voto

Edward Tanguay Points 43219

J'ai ajouté une "Hauteur" à mon ListBox et il a bien ajouté la barre de défilement.

4voto

Paras Points 31

La barre de défilement est automatiquement ajoutée à la zone de liste, à moins que sa visibilité ne soit définie sur Masqué. Chaque fois que la taille des éléments de la liste dépasse celle qui est affichée, celle-ci peut être affichée dans une zone de liste verticale ou horizontale.

1voto

oldDavid Points 31

Dans mon cas, le nombre d'éléments dans le contrôle ListBox est dynamique, je ne voulais donc pas utiliser la propriété Height. J'ai utilisé MaxHeight à la place et cela fonctionne bien. La barre de défilement apparaît lorsqu'elle remplit l'espace que je lui ai alloué.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X