WPF图像按钮格式

时间:2010-06-08 12:41:36

标签: wpf

如果我创建一个内部带有图像的按钮,它会被炸成比图像大得多的尺寸。

如果我尝试约束图像的大小和容器按钮,图像会被切断:

<Button Background="Transparent" Width="18" Height="18" Margin="0,0,0,0" Padding="0,0,0,0" BorderBrush="{x:Null}">
    <Image Width="16" Height="16" />
</Button>

原生图像尺寸为16x16。这里的按钮是18x18,带有0填充,但图像仍然在右/底部被切断。

如何使整个按钮与图像的大小完全相同?

4 个答案:

答案 0 :(得分:49)

WPF的美丽(和诅咒?)是重新模板控制的能力。

你可以设置按钮的模板,如下所示(这是免费的,所以你需要根据自己的喜好稍微调整一下):

        <Button x:Name="btn16x16">
            <Button.Template>
                <ControlTemplate>
                    <Border HorizontalAlignment="Center" VerticalAlignment="Center" >
                        <Image Source="pack://siteoforigin:,,,/Resources/SixteenBySixteen.png" 
                               Width="16" 
                               Height="16"/>
                    </Border>
                </ControlTemplate>
            </Button.Template>
        </Button>

答案 1 :(得分:12)

您可以使用Button.BackgroundImageBrush作为示例:

<Button Height="24" Width="24" >
    <Button.Background>
        <ImageBrush ImageSource="image name or path" Stretch="Fill" TileMode="None" />
    </Button.Background>
</Button>

答案 2 :(得分:10)

您应该删除所有WidthHeight设置,并将Button的HorizontalAlignmentVerticalAlignment设置为Center(或Left / { {1}}或Right / Top。默认情况下,这些属性设置为Bottom,这使按钮可以伸展到可用空间。由于图像是按钮的内容,因此它也会被拉伸。这样的事情应该有效:

以此代码为例:

Stretch


以下只是作为一个替代,其结果不同,显然(考虑到你的评论)不是你想要的。

<击> 如果您希望按钮拉伸而不是图像,您还可以将<Button Background="Transparent" BorderBrush="{x:Null}" HorizontalAlignment="Center" VerticalAlignment="Center"> <Image Source="thePathToYourImage" Stretch="None"/> <!-- EDIT: added Stretch="None" here! --> </Button> 的对齐属性设置为Image以外的其他属性。或者您可以将其Stretch属性设置为Stretch。这将使按钮尽可能大,但保持图像的原始大小(16x16)。这将按如下方式工作:

None

<击>

答案 3 :(得分:0)

认为this可能会为人们提供他们正在寻找的答案,带图像的按钮,根本没有边框。