c# xaml windows-runtime winrt-xaml scrollviewer

c# - ScrollViewer no funciona con StackPanel



xaml windows-runtime (4)

Después de una larga noche de sueño, lo resolví cambiando el StackPanel padre a una Grilla . Mantuve el segundo StackPanel dentro del elemento ScrollViewer y funciona.

No sé por qué el ScrollViewer no funciona cuando su elemento primario es un StackPanel en lugar de una Grid. Si alguien sabe por qué, por favor explícame. No quería hacer una cuadrícula con solo una columna y dos filas, porque parece que el propósito vertical de StackPanel.

Aunque lo resolví sin saber por qué, espero que esta pregunta ayude a alguien más con el mismo problema y si está leyendo esto y puede explicar este problema, dígame por favor ... Me encantará saberlo.

Lado izquierdo de mi página Tengo un StackPanel vertical con los siguientes elementos:

  • 1 TextBlock
  • 1 StackPanel vertical con múltiples elementos que llena el espacio disponible

Estoy intentando hacer que el segundo StackPanel se pueda desplazar con un elemento ScrollViewer pero sin éxito. Si defino ScrollViewer Height en algún valor, funciona, pero no quiero porque quiero que llene todo el espacio vertical disponible.

Estoy pensando en aplicar Height ScrollViewer en el código de lectura de StackPanel calculado Height, pero esta no parece la forma correcta de hacerlo. Intenté también vincular Height y ActualHeight a la propiedad StackPanel Height pero sin resultados.

<ScrollViewer Grid.Row="1" VerticalAlignment="Top" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollMode="Enabled" ScrollViewer.HorizontalScrollMode="Disabled" ScrollViewer.ZoomMode="Disabled"> <StackPanel x:Name="sptest" Orientation="Vertical"> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test1</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test2</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test3</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test4</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test5</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test6</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test7</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test8</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test9</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test10</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test11</TextBlock> <TextBlock Style="{StaticResource PageHeaderTextStyle}">test12</TextBlock> </StackPanel> </ScrollViewer>

Además también tengo un espacio disponible horizontal de relleno de GridView y automáticamente tiene barra de desplazamiento. No lo definí y aparece cuando es necesario. Es extraño que StackPanel no se comporte como yo quiero. ¿Qué estoy haciendo mal?

EDITAR

Encontré esta pregunta ASÍ . Se trata de WPF y no de WinRT, pero probablemente sea el mismo problema. Dice:

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

Cambié mi StackPanel a una Grid (no quería hacerlo debido a las definiciones de las filas ya que solo quiero una columna) pero ScrollViewer tampoco funciona.


El panel de pila es un tipo de contenedor que puede seguir creciendo tanto como los niños que agrega y proporciona el mismo espacio para cada uno de sus hijos, por lo que el scrollviewer requiere una altura aquí para indicarle a los padres que definan los límites de espacio; para que pueda funcionar en su área asignada.

Espero que ayude.


Hice mi trabajo haciendo que el StackPanel sea un elemento secundario del ScrollViewer y establezca la altura del StackPanel


Acabo de dar un MaxHeight al ScrollViewer. Supongo que el ScrollViewer necesita saber cuál es su altura máxima para averiguar, cuándo mostrar las barras de desplazamiento, si las tiene en visibilidad automática.
Lo intenté con y sin MaxHeight para el ScrollViewer y solo funcionó con un atributo MaxHeight.
Si tuviera que aventurarme a adivinar, diría que el Grid conoce su MaxHeight de los atributos que estableces, pero no estoy seguro, solo es una suposición.