ScrollViewer无法使用StackPanel

时间:2013-03-10 00:41:05

标签: c# xaml windows-runtime winrt-xaml scrollviewer

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

  • 1 TextBlock
  • 1个垂直StackPanel,其中包含多个填充可用空间的元素

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

我正在考虑在代码读取StackPanel计算高度时应用ScrollViewer Height,但这似乎不是正确的方法。 我还尝试将高度 ActualHeight 绑定到StackPanel高度属性,但没有结果。

<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的行为并不像我想要的那样。我做错了什么?

修改

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

  

你不能不固定StackPanel的高度。它旨在无限制地向一个方向发展。我建议使用不同的面板

我将StackPanel更改为Grid(我不想因为行定义,因为我只需要一列)但ScrollViewer也不能正常工作。

4 个答案:

答案 0 :(得分:16)

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

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

即使我在不​​知道原因的情况下解决了这个问题,我希望这个问题可以帮助其他人解决同样的问题,如果你正在阅读本文,你可以解释这个问题,请告诉我......我很乐意知道。

答案 1 :(得分:3)

堆栈面板是一种容器,它可以像你添加的子容量一样多,并为每个子容器提供相等的空间。因此,scrollviewer需要一个高度来告诉父级定义空间限制;所以它可以在指定的区域内运作。

希望有所帮助。

答案 2 :(得分:1)

我刚刚向ScrollViewer提供了MaxHeight。我想ScrollViewer需要知道它的最大高度是什么,以便弄清楚何时显示滚动条,如果你有它们的自动可见性。
我只是尝试使用ScrollViewer和没有MaxHeight的ScrollViewer,它只适用于MaxHeight属性。
如果我不得不冒险猜测,我会说Grid从你设置的属性中知道它的MaxHeight,但我不确定,这只是猜测。

答案 3 :(得分:0)

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