78 votes

Comment puis-je faire fonctionner ScrollViewer à l'intérieur d'un StackPanel?

Dans le XAML WPF suivant, le ScrollViewer ne fonctionne pas (il affiche une barre de défilement mais vous ne pouvez pas faire défiler et le contenu sort de la fenêtre vers le bas).

Je peux modifier le StackPanel externe en Grid et ça marchera.

Cependant, dans mon application à partir de laquelle j'ai reproduit le code suivant, j'ai besoin d'avoir un StackPanel externe. Que dois-je faire au StackPanel pour que le ScrollViewer montre une barre de défilement utilisable ? par exemple VerticalAlignment="Stretch" Height="Auto" ne fonctionnent pas.

63voto

Rob Points 976

Cela me tracassait aussi pendant un certain temps, le truc est de mettre votre stackpanel dans un scrollviewer.

De plus, vous devez vous assurer de définir la propriété CanContentScroll du visualiseur de défilement sur True, voici un exemple :

0 votes

Où se trouve la propriété CanContentScroll? Voir msdn.microsoft.com/en-us/library/…

3 votes

Giddy> Veuillez consulter ce lien : - msdn.microsoft.com/en-us/library/ms612683.aspx

3 votes

"Vous devez vous assurer de définir la propriété CanContentScroll du visualiseur de défilement sur True" --- Je ne peux toujours pas croire que ce n'est pas la valeur par défaut pour un contrôle nommé "ScrollViewer".

63voto

Kent Boogaart Points 97432

Vous ne pouvez pas sans fixer la hauteur du StackPanel. Il est conçu pour croître indéfiniment dans une direction. Je conseillerais d'utiliser un Panel différent. Pourquoi avez-vous "besoin" d'avoir un StackPanel externe ?

14 votes

Voulais empiler des choses et en utilisant la Grille vous devez gérer manuellement toutes les lignes et colonnes, mais DockPanel fonctionne bien donc je vais passer à ça, merci.

1 votes

Je suis d'accord avec Edward. Dans mon expérience, l'emballage de mes DataGrids dans un DockPanel puis en définissant DockPanel.Dock="Top" pour chaque DataGrid a très bien fonctionné.

2 votes

Quel contrôle alternatif devrais-je utiliser dans UWP? Il n'y a pas de DockPanel. Merci.

9voto

huttelihut Points 1621

Remarquez que parfois vous pouvez avoir un StackPanel sans le réaliser. Dans mon cas, j'avais ce code

qui fonctionnait bien. Les "Pages" référencées par la liaison étaient en réalité des UserControl différents et complexes, et je voulais n'avoir des barres de défilement que sur certains d'entre eux. J'ai donc enlevé le ScrollViewer :

Et ensuite, j'ai placé le ScrollViewer comme élément supérieur sur les UserControl où je voulais les avoir. Cependant, cela n'a pas fonctionné. Le contenu sortait de la page. Au début, je ne pensais pas que cette question/réponse pouvait m'aider, mais ensuite j'ai réalisé que le panel d'éléments par défaut d'un ItemsControl est le StackPanel. J'ai donc résolu mon problème en spécifiant un ItemsPanel qui n'était pas le StackPanel :

5voto

Luis Delgado Points 145

En effet, la manière dont j'ai résolu ce dilemme a été de supprimer le stack panel extérieur et de placer le scrollviewer à l'endroit désiré à l'intérieur de la grille principale.

                ...

0 votes

Placer le ScrollView dans une grille sur une ligne avec Height = "*" a résolu le problème pour moi.

1voto

user3522840 Points 1

Déplacer Grid.Row="1" de StackPanel à ScrollViewer a complètement résolu le problème pour moi.

J'avais une longue liste d'environ 40 éléments à afficher dans un StackPanel, mais seuls les 20 premiers s'affichaient.

        ...

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