9

我的页面左侧有一个垂直 StackPanel,其中包含以下元素:

  • 1 个文本块
  • 1 个带有多个元素的垂直 StackPanel,可填充可用空间

我正在尝试使用ScrollViewer元素使第二个StackPanel 可滚动,但没有成功。如果我将 ScrollViewer Height 定义为某个值,它可以工作,但我不想这样做,因为我希望它填充所有可用的垂直空间。

我正在考虑在读取 StackPanel 计算高度的代码中应用 ScrollViewer Height,但这似乎不是正确的做法。我还尝试将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 的高度。它旨在无限期地向一个方向增长。我建议使用不同的面板

我将 StackPanel 更改为 Grid(由于行定义,我不想这样做,因为我只想要一列)但 ScrollViewer 也不起作用。

4

4 回答 4

18

经过漫长的一夜睡眠后,我通过将父 StackPanel更改为Grid来解决它。我将第二个 StackPanel 保留在 ScrollViewer 元素中,它可以工作。

我不知道为什么当它的父级是 StackPanel 而不是 Grid 时 ScrollViewer 不起作用。如果有人知道为什么,请向我解释。我不想制作一个只有一列和两行的网格,因为这似乎是垂直 StackPanel 的目的。

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

于 2013-03-10T16:05:05.727 回答
3

堆栈面板是一种容器,它可以随着您添加到其中的子项而不断增长,并为其每个子项提供相等的空间,因此滚动查看器需要一个高度来告诉父项定义空间限制;因此它可以在其指定的区域内运行。

希望有帮助。

于 2014-01-22T18:52:42.693 回答
1

我只是给了 ScrollViewer 一个 MaxHeight。我想 ScrollViewer 需要知道它的最大高度是多少,以便确定何时显示滚动条,如果您将它们设置为自动可见性。
我只是在 ScrollViewer 的 MaxHeight 和没有 MaxHeight 的情况下进行了尝试,它只适用于 MaxHeight 属性。
如果我不得不冒险猜测,我会说 Grid 从您设置的属性中知道它的 MaxHeight,但我不确定,这只是一个猜测。

于 2016-08-24T23:14:43.487 回答
0

我通过使 StackPanel 成为 ScrollViewer 的子级并设置 StackPanel 的高度来完成我的工作

于 2015-11-10T18:21:12.387 回答