Comment puis-je faire fonctionner ScrollViewer dans un StackPanel?

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

Je peux changer le StackPanel externe en grid et cela fonctionnera.

Cependant, dans mon application à partir de laquelle j’ai reproduit le code suivant, je dois avoir un StackPanel externe. Que dois-je faire au StackPanel pour que ScrollViewer affiche une barre de défilement utilisable? eg VerticalAlignment = “Stretch” Height = “Auto” ne fonctionne pas.

                                 

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

Cela m’a bousculé pendant un moment, le truc est de placer votre stackpanel dans un scrollviewer.

En outre, vous devez vous assurer que vous définissez la propriété CanContentScroll du visualiseur de défilement sur True. Voici un exemple:

     

Notez que parfois vous pouvez avoir un StackPanel sans le savoir. Dans mon cas j’ai eu ce code

    

qui a bien fonctionné. Les “Pages” référencées par la liaison étaient vraiment différentes, les UserControls complexes, et je voulais avoir seulement des barres de défilement sur certaines d’entre elles. J’ai donc enlevé le scrollviewer:

   

Et puis je mets le ScrollViewer en tête de ceux des contrôles d’usage que je souhaitais. Cependant, cela n’a pas fonctionné. Le contenu vient de sortir de la page. Au début, je ne pensais pas que cette question / réponse pouvait m’aider, mais j’ai réalisé que le ItemPanel 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:

        

En effet, la façon dont j’ai résolu ce dilemateur était de retirer le panneau de stack externe et de placer le scrollviewer dans la position souhaitée dans la grid principale.

           ...    

Voilà comment cela fonctionne:

                                                                

En liant la hauteur du ScrollViewer à la hauteur intérieure de Window.

La logique de redimensionnement est que nous devons donner une hauteur de correction à un élément ou concevoir la vue pour utiliser la hauteur de rendu.

Sortie:

Barre de défilement dans Stackpanel

Déplacer Grid.Row = “1” de StackPanel vers ScrollViewer l’a complètement résolu pour moi.

J’avais une longue liste de 40 éléments à afficher dans un StackPanel, mais seuls les 20 premiers étaient présentés.

      ...