如何在Silverlight中向StackPanel添加滚动条?

4
我有一个3行3列的Grid(3个RowDefinitions和3个ColumnDefinitions),我想让其中一个单元格中的内容(一个StackPanel)滚动。我相当确定这是可能的,但我无法弄清楚如何实现。我尝试在要滚动的网格单元格中添加ScrollViewersScrollBar控件,但这通常会导致整个页面滚动。
编辑: 更具体地说,我的问题是如何在StackPanel上滚动。我遇到的问题示例在此处:
<Grid x:Name="LayoutRoot">
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <Grid>
        <TextBlock FontSize="16">1,1</TextBlock>
    </Grid>
    <Grid Grid.Column="1">
        <TextBlock FontSize="16">1,2</TextBlock>
    </Grid>
    <Grid Grid.Row="1">
        <TextBlock FontSize="16">2,1</TextBlock>
    </Grid>
    <Grid Grid.Column="1" Grid.Row="1">
        <StackPanel>
            <TextBlock>Title</TextBlock>
            <Grid>
                <ScrollViewer>
                    <StackPanel>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                        <TextBlock FontSize="32">2,2</TextBlock>
                    </StackPanel>
                </ScrollViewer>
            </Grid>
        </StackPanel>
    </Grid>
</Grid>

ScrollViewer是完成此任务的工具,也许您可以展示一下使用ScrollViewer无法正常工作的Xaml代码。 - AnthonyWJones
安东尼是正确的。在网格单元中使用ScrollViewer正是你要寻找的。 - JustinAngel
感谢您提供帮助。我已经更新了我的帖子,使其更具体。 - programatique
1个回答

3

StackPanel把其内容视为具有无限空间。要滚动StackPanel,您需要在某个东西上放置高度约束-最可能是StackPanel的网格父级。


有没有一种方法可以设置StackPanel的高度,使其随着其父Grid动态变化? - programatique
如果您设置了StackPanel的高度,则其中的控件将不会显示。您需要让StackPanel的大小适应其中的控件,然后在显示视口内滚动StackPanel。设置最内层StackPanel的父级Grid的高度。然后,ScrollViewer将在较小的Grid视口内滚动较大的StackPanel。 - dthorpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接