C# 堆栈面板高度超过父网格高度
我有这样的情况:C# 堆栈面板高度超过父网格高度,c#,wpf,xaml,C#,Wpf,Xaml,我有这样的情况: <UserControl> <Grid x:Name="fullGrid" VerticalAlignment="Stretch"> <Grid.RowDefinitions> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid x:Name="innerGrid" Ver
<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}
,因为我的内部有一些额外的边距,这会破坏视图
我如何处理这个问题?ScrollViewer
填充它的父对象StackPanel
希望根据其子对象的大小调整大小,并告诉他们有自己想要的空间(然后“缩小以适应”)
因此,StackPanel
告诉ScrollViewer
它可以拥有世界上所有的空间,而这正是它所乐于拥有的。除了按照您的描述进行绑定或设置绝对高度之外,没有其他方法可以阻止这种情况
因此,简单的解决方案是:移除StackPanel
。然后,ScrollViewer
将占用网格
分配给它的空间。首先在堆栈面板中包装滚动查看器有什么特殊原因吗?基本的答案是你不能这样做,但是有解决办法没有理由包装ScrollViewer。移除它是有效的!你能给我解释一下它的原理吗?基本上StackPanel需要通过它的孩子来确定它的大小。现在,它内部的ScrollViewer不报告大小,但需要它的父级报告ScrollViewer将自行调整的大小。由于这两个控件都没有得到它所需要的,因此它们无法按应有的方式调整大小/渲染。