我有这样的情况:
<UserControl>
<Grid x:Name="fullGrid" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid x:Name="innerGrid" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel x:Name="leftSide" VerticalAlignment="Stretch">
<ScrollViewer VerticalAlignment="Stretch">
<ItemsControl/ VerticalAlignment="Stretch">
</ScrollViewer>
</StackPanel>
</Grid>
</Grid>
</UserControl>
问题是leftSide
stackPanel高度高于它的父级:innerGrid
高度。
我在Snoop中进行了调试,似乎StackPanel忽略了它的VerticalAlignment
属性。
我想避免设置Heigh={Binding ElementName=xxx, Path=ActualHeight}
因为我内部有一些额外的Margins
,它会破坏视图。
我该如何处理?
答案 0 :(得分:2)
ScrollViewer
填写其父母。 StackPanel
希望为其子项调整大小,因此告诉他们他们有足够的空间(然后“收缩到适合”)。
所以,StackPanel
告诉ScrollViewer
它可以拥有世界上所有的空间,它很乐意。除了在描述或设置绝对高度时进行绑定外,没有办法阻止它。
所以简单的解决方案是:删除StackPanel
。然后,ScrollViewer
会占用Grid
指定的空间。