ScrollViewer不能与StackPanel一起工作
本文关键字:一起 工作 StackPanel 不能 ScrollViewer | 更新日期: 2023-09-27 18:03:05
在我的页面左侧,我有一个垂直的StackPanel与以下元素:
- 1 TextBlock
- 1垂直StackPanel与多个元素填充可用空间
我试图使第二个StackPanel可滚动与ScrollViewer元素,但没有成功。如果我将ScrollViewer的高度定义为某个值,它会起作用,但我不想这样做,因为我想让它填充所有可用的垂直空间。
我想在代码中应用ScrollViewer的高度阅读StackPanel计算高度,但这似乎不是正确的方法。我还尝试绑定Height和ActualHeight到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不工作。
经过长时间的睡眠,我通过改变父StackPanel到Grid解决了这个问题。我保持第二个StackPanel内ScrollViewer元素,它的工作。
我不知道为什么ScrollViewer不工作时,它的父是一个StackPanel而不是一个网格。如果有人知道原因,请解释给我听。我不想做一个只有一列两行的网格,因为这似乎是垂直的StackPanel的目的。
即使我在不知道为什么的情况下解决了它,我希望这个问题能帮助到同样问题的其他人,如果你正在阅读这篇文章,你可以解释这个问题,请告诉我…我很想知道。
Stack panel是一种容器类型,它可以随着添加的子元素的数量不断增长,并为每个子元素提供相同的空间,因此scrollviewer需要在这里设置一个高度来告诉父元素定义空间限制;所以它可以在指定的区域发挥作用。
我刚刚给了ScrollViewer一个MaxHeight。我猜ScrollViewer需要知道它的最大高度是多少,以便弄清楚什么时候显示滚动条,如果你把它们设置为自动可见。
我只是尝试了它有和没有一个MaxHeight的ScrollViewer,它只工作与MaxHeight属性。
如果我必须冒险猜测,我会说,网格知道它的MaxHeight从属性设置,但我不确定,这只是一个猜测。
我通过使StackPanel成为ScrollViewer的子控件并设置StackPanel的高度