ScrollViewer无法使用StackPanel

let*_*ves 9 c# xaml scrollviewer windows-runtime winrt-xaml

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

  • 1个TextBlock
  • 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>
Run Code Online (Sandbox Code Playgroud)

除了我还有一个GridView填充水平可用空间,它自动有滚动条.我没有定义它,必要时它会出现.很奇怪,StackPanel的行为并不像我想要的那样.我究竟做错了什么?

编辑

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

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

我将StackPanel更改为Grid(我不想因为行定义,因为我只需要一列),但ScrollViewer也不起作用.

let*_*ves 18

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

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

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