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.
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:
Mettez-le dans un fichier ScrollViewer
.
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>
StackPanel
met en œuvre IScrollInfo
et 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é"?
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);
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>
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