¿Cómo puedo hacer que ScrollViewer funcione dentro de un StackPanel?

En el siguiente WPF XAML, el ScrollViewer no funciona (muestra una barra de desplazamiento, pero no puede desplazarse y los contenidos salen de la ventana hacia la parte inferior).

Puedo cambiar el StackPanel externo a una Grilla y funcionará.

Sin embargo, en mi aplicación desde la que reproduje el siguiente código, necesito tener un StackPanel externo. ¿Qué tengo que hacer con el StackPanel para hacer que el ScrollViewer muestre una barra de desplazamiento utilizable? por ejemplo VerticalAlignment = “Stretch” Height = “Auto” no funciona.

                                 

No se puede sin fijar la altura del StackPanel . Está diseñado para crecer indefinidamente en una dirección. Aconsejaría usar un Panel diferente. ¿Por qué “necesitas” tener un StackPanel externo?

Esto también me estaba molestando por un tiempo, el truco es poner tu stackpanel dentro de un scrollviewer.

Además, debe asegurarse de establecer la propiedad CanContentScroll del visor de desplazamiento en True, aquí hay un ejemplo:

     

Tenga en cuenta que a veces puede tener un StackPanel sin darse cuenta. En mi caso tenía este código

    

que funcionó bien Las “Páginas” a las que hacía referencia el enlace eran UserControls realmente diferentes y complejos, y yo quería tener solo barras de desplazamiento en algunos de ellos. Así que eliminé el scrollviewer:

   

Y luego puse el ScrollViewer como el elemento superior en los controles de usuario donde los quería. Sin embargo, esto no funcionó. El contenido fluyó de la página. Al principio no pensé que esta pregunta / respuesta podría ayudarme, pero me di cuenta de que el Panel de artículo predeterminado de un ItemsControl es el StackPanel. Así que resolví mi problema especificando un ItemsPanel que no era el StackPanel:

        

De hecho, la forma en que resolví ese dileman fue eliminar el panel de la stack exterior y, en su lugar, establecer el scrollviewer en la posición que quería dentro de la grilla principal.

           ...    

Así es como funciona:

                                                                

Al vincular la altura del ScrollViewer a la altura interna de la ventana.

La lógica del redimensionamiento es que debemos dar a cualquier elemento la altura de corrección o diseñar la vista para usar la altura de renderizado.

Salida:

Barra de desplazamiento en Stackpanel

Mover Grid.Row = “1” de StackPanel a ScrollViewer lo resolvió completamente para mí.

Tenía una larga lista de unos 40 elementos para mostrar en un StackPanel, pero solo se mostraban los primeros 20.

      ...