在WPF应用程序中将按钮大小设置为内容大小

25

我有以下WPF XAML代码:

<Window x:Class="WPFDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <StackPanel>
        <Button Content="Hello World" Width="Auto" Height="Auto"></Button>
    </StackPanel>


</Window>

我已将按钮的宽度和高度设置为“自动”,但仍然会完全横向拉伸。我做错了什么?我不想为宽度和高度提供硬编码的值!


2
尝试通过设置<Button HorizontalAlignment="Left">。 - Heena
3个回答

28
您正在使用错误的容器控件。 StackPanel 不会自动调整其内容大小。请尝试使用 Grid 替代:
<Grid>
    <Button Content="Hello" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>

此外,您不需要将WidthHeight设置为"Auto",因为默认值将使Button可以根据其父容器自动拉伸(取决于容器控件)。有关WPF中各种容器控件之间的差异的更多帮助,请参阅MSDN上的面板概述页面。

您也可以将网格删除,直接将按钮作为“Window”内容放置。 - Nicolas Repiquet
3
我试图将按钮放入网格中,但现在按钮占据了整个屏幕而不是内容的大小。看起来我必须将网格分成行和列。 - john doe
3
HorizontalAlignmentVerticalAlignment 设置为 Center,按钮将适应其内容。 - Nicolas Repiquet
哇,我们这里有一个输不起的人...愿意评论一下投反对票的人吗? - Sheridan
我给你的回答点了个踩,因为它与容器类型无关,仅与按钮的对齐方式有关。我已经测试过了。你的回答在某种程度上会误导人们。 - Eric Ouellet
显示剩余2条评论

6

正如Sheridan所说,您不需要将Width和Height设置为“Auto”。 您的问题在于StackPanel内容的默认对齐方式是“Stretch”。 因此,只需将按钮的HorizontalAlignment属性设置为“Left”或“Right”即可。


为什么,就为什么这是默认值? - Paul
1
@Paul:我认为这个想法是我们通常使用StackPanels来处理需要相同大小的情况,而使用GridPanels来处理奇怪大小的组件(因为GridPanels有更多的功能来对齐它们)。虽然我是WPF的新手,但我已经使用过其他布局管理器(如Qt、Swing和各种Web布局),对于每一个布局管理器,都需要一些经验才能最有效地使用它们。 - Michael Scheper

0
<Window x:Class="WPFDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow">
    <Grid>
        <Button Content="Hello World" Width="Auto" Height="Auto"></Button>
    </Grid>
</Window>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接