我正在制作一个工具栏,希望窗口的宽度等于所有按钮的总宽度。 StackPanel 似乎非常适合这项工作,因为它可以将所有内容对齐,但是它不能自动拉伸。
<Window Width="auto">
<StackPanel Orientation="Horizontal" Width="auto">
<Button />
<Button />
</StackPanel>
</Window>
我该如何让这个工作起来?
我正在制作一个工具栏,希望窗口的宽度等于所有按钮的总宽度。 StackPanel 似乎非常适合这项工作,因为它可以将所有内容对齐,但是它不能自动拉伸。
<Window Width="auto">
<StackPanel Orientation="Horizontal" Width="auto">
<Button />
<Button />
</StackPanel>
</Window>
我该如何让这个工作起来?
<Window SizeToContent="Width"
这是唯一需要的更改。
此段代码来源:https://dev59.com/cnI-5IYBdhLWcg3wpqIK#2317914,是该问题排名第二的答案,我认为这个答案更好。
<UniformGrid Margin="10" Rows="1" HorizontalAlignment="Right"
VerticalAlignment="Bottom">
<Button Grid.Column="0" Content="No" FontSize="18" Margin="5" Padding="6,3"/>
<Button Grid.Column="1" Content="Yes, Absolutely" Margin="5" Padding="6,3"/>
<Button Grid.Column="2" Content="Maybe" Margin="5" Padding="6,3"/>
</UniformGrid>
UniformGrid提供了相同高度和宽度的每个单元格。这正是您想要的,因为您可以避免手动设置按钮大小。
更新:
我建议不要使用Stackpanel。即使您使Stackpanel填充其父级,其子级仍然会"stacks",而不会填充Stackpanel。
根据您的设置,您可以使用StackPanel的对齐方式轻松实现。例如,此XAML:
<Window Width="350" Height="350" ...>
<Grid>
<StackPanel
Background="Green">
<Border
Width="100"
Height="100"
Background="Blue" />
<Border
Width="100"
Height="100"
Background="Red" />
</StackPanel>
</Grid>
</Window>
将创建这个(面板会拉伸到父级的大小):
而且这个面板:
<Window Width="350" Height="350" ...>
<Grid>
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="Green">
<Border
Width="100"
Height="100"
Background="Blue" />
<Border
Width="100"
Height="100"
Background="Red" />
</StackPanel>
</Grid>
</Window>
将创建此内容(尺寸调整为两个包含的边框):
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button />
<Button Grid.Column="1" />
<Button Grid.Column="2" />
<Button Grid.Column="3" />
</Grid>