如果我创建一个内部带有图像的按钮,它会被炸成比图像大得多的尺寸。
如果我尝试约束图像的大小和容器按钮,图像会被切断:
<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填充,但图像仍然在右/底部被切断。
如何使整个按钮与图像的大小完全相同?
答案 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.Background
和ImageBrush
作为示例:
<Button Height="24" Width="24" >
<Button.Background>
<ImageBrush ImageSource="image name or path" Stretch="Fill" TileMode="None" />
</Button.Background>
</Button>
答案 2 :(得分:10)
您应该删除所有Width
和Height
设置,并将Button的HorizontalAlignment
和VerticalAlignment
设置为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可能会为人们提供他们正在寻找的答案,带图像的按钮,根本没有边框。