Comment ajouter un ScrollBar à un Stackpanel


106

Dans mon application WPF, j'ai un Stackpanel contenant plusieurs contrôles à l'intérieur. Comment puis-je ajouter une barre de défilement à ce stackpanel.

Réponses:


162

Mettez-le dans un fichier ScrollViewer.


Merci. Après avoir placé un ScrollViewer autour de lui, tout le contenu ne s'affiche pas. J'ai essayé de régler la hauteur et la largeur sur Auto, mais pas de chance. Pourquoi ne devrait-il montrer qu'une partie limitée?
Shamim Hafiz le

5
Je n'ai aucune idée. Votre question était de deux phrases, ce qui est un peu détaillé pour anticiper les problèmes potentiels.
Joey le

Compris, je plaçais la balise d'ouverture au mauvais endroit. Merci beaucoup pour l'aide.
Shamim Hafiz le

Réponse simple et parfaite.
David Piao le

94

Stackpanel n'a pas de mécanisme de défilement intégré, mais vous pouvez toujours envelopper le StackPanel dans un ScrollViewer

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <StackPanel ... />
</ScrollViewer>

3
Eh bien, StackPanelmet en œuvre IScrollInfoet propose un certain nombre de méthodes liées au défilement. Etes-vous sûr qu'il ne dispose d'aucun mécanisme de défilement "intégré"?
OR Mapper

4
from msdn.microsoft.com/en-us/library/… ... "Cette propriété n'est pas destinée à être utilisée dans votre code. Elle est exposée publiquement pour remplir un contrat d'interface (IScrollInfo). La définition de cette propriété n'a aucun effet. Si vous avez besoin d'un défilement physique au lieu d'un défilement logique, enveloppez le StackPanel dans un ScrollViewer et définissez sa propriété CanContentScroll sur false. "
Skinner

11

Cela fonctionne comme ceci:

<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled" Width="340" HorizontalAlignment="Left" Margin="12,0,0,0">
        <StackPanel Name="stackPanel1" Width="311">

        </StackPanel>
</ScrollViewer>

TextBox tb = new TextBox();
tb.TextChanged += new TextChangedEventHandler(TextBox_TextChanged);
stackPanel1.Children.Add(tb);

0

Pour StackPanel orienté horizontalement, mettre explicitement les deux visibilités de la barre de défilement a fonctionné pour moi pour obtenir la barre de défilement horizontale.

    <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
        <StackPanel Orientation="Horizontal" />
    </ScrollViewer>

1
Répétition des réponses précédentes.
vapcguy

-4

Si vous voulez dire que vous voulez faire défiler plusieurs éléments dans votre stackpanel, essayez de mettre une grille autour de lui. Par définition, un stackpanel a une longueur infinie.

Alors essayez quelque chose comme ça:

   <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel Width="311">
              <TextBlock Text="{Binding A}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontStretch="Condensed" FontSize="28" />
              <TextBlock Text="{Binding B}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
        </StackPanel>
    </Grid>

Vous pouvez même faire fonctionner cela avec un ScrollViewer


4
Ce code est sorti de son contexte. Pourriez-vous supprimer les dépendances afin que le code soit utilisable sans modifications supplémentaires?
Markus Jarderot le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.