我有一个基本结构的WPF控件:
<Grid>
<ScrollViewer x:Name="_Scroll" Grid.Row="4" Grid.RowSpan="20" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" CanContentScroll="True" >
<StackPanel x:Name="_Panel" />
</ScrollViewer>
</Grid>
稍后在执行期间将一些Grid
项添加到_Panel,从而生成垂直对齐的项列表。当滚动条不可见时,这一切都能正常工作,但当我实际需要滚动内容时,StackPanel会溢出,我最终会看到StackPanel内容的一部分上面 ScrollViewer。有什么可能导致这个问题的想法?如果您需要更多详细信息,请告诉我,我会正确编辑问题。
编辑:Added an image explaining the issue better:上面是控件在开始滚动之前的样子,下面是ScrollViewer上溢出的项目的问题。至于代码,在面板中插入项目并没有什么特别之处,它基本上属于以下几行:
Dim nRow As New Grid
' Insertion of subcontrols within nRow
_Panel.Children.Add(nRow)
答案 0 :(得分:1)
这是因为稍后在堆栈面板中添加的项目数量不会更新滚动条的高度(它是外部的),并且仅指向stackpanel的原始大小 你可以解决如下:
[编辑]为您的堆栈面板提供相对或绝对大小,以便显示滚动条。
类似的东西:
<Grid Name="GridContent" Height="XXX" >
<StackPanel Height="{Binding ActualHeight, ElementName=GridContent}"
Orientation="Vertical"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.CanContentScroll="True">
</StackPanel>
</Grid>