ScrollViewer不能与StackPanel一起工作

本文关键字:一起 工作 StackPanel 不能 ScrollViewer | 更新日期: 2023-09-27 18:03:05

在我的页面左侧,我有一个垂直的StackPanel与以下元素:

  • 1 TextBlock
  • 1垂直StackPanel与多个元素填充可用空间

我试图使第二个StackPanel可滚动ScrollViewer元素,但没有成功。如果我将ScrollViewer的高度定义为某个值,它会起作用,但我不想这样做,因为我想让它填充所有可用的垂直空间。

我想在代码中应用ScrollViewer的高度阅读StackPanel计算高度,但这似乎不是正确的方法。我还尝试绑定HeightActualHeight到StackPanel Height属性,但没有结果。

<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>

旁边我也有一个GridView填充水平可用空间,它自动有滚动条。我没有定义它,它在必要时出现。奇怪的是,StackPanel的行为不像我想要的。我做错了什么?

编辑

我发现了这个问题。这是关于WPF而不是WinRT,但可能是同样的问题。它说:

你不能没有固定StackPanel的高度。它被设计成朝着一个方向无限增长。我建议使用不同的Panel

我改变了我的StackPanel网格(我不想因为行定义,因为我只想要一列),但ScrollViewer不工作。

ScrollViewer不能与StackPanel一起工作

经过长时间的睡眠,我通过改变父StackPanelGrid解决了这个问题。我保持第二个StackPanel内ScrollViewer元素,它的工作。

我不知道为什么ScrollViewer不工作时,它的父是一个StackPanel而不是一个网格。如果有人知道原因,请解释给我听。我不想做一个只有一列两行的网格,因为这似乎是垂直的StackPanel的目的。

即使我在不知道为什么的情况下解决了它,我希望这个问题能帮助到同样问题的其他人,如果你正在阅读这篇文章,你可以解释这个问题,请告诉我…我很想知道。

Stack panel是一种容器类型,它可以随着添加的子元素的数量不断增长,并为每个子元素提供相同的空间,因此scrollviewer需要在这里设置一个高度来告诉父元素定义空间限制;所以它可以在指定的区域发挥作用。

我刚刚给了ScrollViewer一个MaxHeight。我猜ScrollViewer需要知道它的最大高度是多少,以便弄清楚什么时候显示滚动条,如果你把它们设置为自动可见。
我只是尝试了它有和没有一个MaxHeight的ScrollViewer,它只工作与MaxHeight属性。
如果我必须冒险猜测,我会说,网格知道它的MaxHeight从属性设置,但我不确定,这只是一个猜测。

我通过使StackPanel成为ScrollViewer的子控件并设置StackPanel的高度