[英]Why is this border not moving to the vertical center of the parent StackPanel but does so in a Grid?
在我的Grid
我有以下StackPanel
:
<StackPanel Grid.Row="6" Grid.Column="4" Margin="5, 5, 10, 5" VerticalAlignment="Stretch" Background="Yellow" Orientation="Vertical">
<Border Background="LightGray" BorderThickness="1" BorderBrush="Black" VerticalAlignment="Center">
<StackPanel Orientation="Vertical">
<Button BorderThickness="0" Background="Transparent" Margin="0 10" HorizontalAlignment="Center">
<Button.Content>
<Image Source="\Resources\Arrow2 Up.ico"/>
</Button.Content>
</Button>
<Button BorderThickness="0" Background="Transparent" Margin="0 10" HorizontalAlignment="Center">
<Button.Content>
<Image Source="\Resources\Arrow2 Down.ico"/>
</Button.Content>
</Button>
</StackPanel>
</Border>
</StackPanel>
我将背景设为黄色,因此我们可以看到StackPanel
的大小。 整个事情看起来如下:
我想让按钮位于垂直中心。 我可以通过用另一个Grid
替换外部StackPanel
来实现这一点,我们得到以下结果。
似乎StackPanel
不知道自己的实际高度,但Grid
知道吗? 为什么会这样,或者这种行为还有其他原因吗?
根据定义, StackPanel
根据其Orientation
从上到下垂直堆叠元素或从左到右(或从右到左使用FlowDirection="RightToLeft"
)垂直堆叠元素。
将子元素排列成可以水平或垂直定向的单行。
这就是它所做的一切,它不考虑基于可用空间的比例大小。 另一方面, Grid
具有可以利用星号大小来实现这一点的列和行。
在 Grid 中定义的列和行可以利用 Star 大小来按比例分配剩余空间。 当STAR被选为行或列的高度或宽度时,该列或行接收剩余可用空间的加权比例。
在您的情况下,您甚至可能不需要StackPanel
。 您可以将您的Border
直接放在Grid
并相应地设置它的VerticalAlignment
和HorizontalAligment
属性,例如:
<Border Grid.Row="6" Grid.Column="4" Margin="5, 5, 10, 5" Background="LightGray" BorderThickness="1" BorderBrush="Black" VerticalAlignment="Center">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.