为什么StackA工作正常而不是下面代码片段中的StackB?
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel x:Name="StackA">
<Button Width="90"
Height="50"
HorizontalContentAlignment="Left">
<Label Content="button" />
</Button>
</StackPanel>
<StackPanel x:Name="StackB" Grid.Row="1">
<Button Width="90" Height="50">
<Label HorizontalAlignment="Left" Content="button" />
</Button>
</StackPanel>
</Grid>
AFAIK .. HorizontalAlignment是FrameworkElement的成员,应该通过引用它的父组成元素来对齐控件。
HorizontalContentAlignment是控件本身的成员,相应地对齐其自己的内容。
答案 0 :(得分:3)
这是因为HorizontalContentAlignment
的{{1}}默认值为Button
。
您的标签在其容器内保持对齐,但容器的大小足以容纳标签内容,因此对齐没有区别。然后按钮将该内容居中。
如果您将Center
设置为HorizontalContentAlignment
,您会看到标签在按钮内左对齐,因为它具有可以播放的整个按钮大小。
答案 1 :(得分:2)
在Button
内ContentPresenter
,将其视为另一个Grid
。这本身与Center
的{{1}}对齐。
因此,当您将Button
与Label
对齐时,实际上位于中Left
,位于中心,因此对齐方式没有效果。
ContentPresenter
会影响标签所在的HorizontalContentAlignment
,而不会影响ContentPresenter
本身。