C# 将图像转换为按钮WPF

C# 将图像转换为按钮WPF,c#,wpf,C#,Wpf,我知道我可以在一个按钮上叠加一个图像,但是一个按钮是否可能具有图像的精确大小?换句话说,我想去掉矩形按钮,使其适应图像的大小和形状。您可以如下设置按钮的模板: <Button > <Image Source="pan-left.png"/> <Button.Template> <ControlTemplate TargetType="Button"> &

我知道我可以在一个按钮上叠加一个图像,但是一个按钮是否可能具有图像的精确大小?换句话说,我想去掉矩形按钮,使其适应图像的大小和形状。

您可以如下设置按钮的模板:

    <Button >
        <Image Source="pan-left.png"/>
        <Button.Template>
            <ControlTemplate TargetType="Button">
                <ContentPresenter Content="{TemplateBinding Content}"/>
            </ControlTemplate>
        </Button.Template>
    </Button>

TemplateBinding
用于设置
Content
属性,以便设置ControlTemplate内的内容,因为您可以将此
ControlTemplate
移动到
资源
中,并可将其用于多个按钮,您可以设置按钮本身的内容。请选中此项

您可以重新设置按钮的模板

<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>

在上述代码中,您正在对图像路径进行硬编码。如果要重用模板,请尝试以下代码。有两种方法

如果您正在项目中嵌入图像,请单击下面的按钮

<Button Tag="Images\Grapes.png" Background="Black" Foreground="white" Focusable="False" Width="100" Height="30">
        <Button.Template>
            <ControlTemplate TargetType="Button">                    
                <Image Source="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Tag}" />
            </ControlTemplate>
        </Button.Template>
    </Button>

如果要在项目中添加图像作为内容,请使用绝对路径执行以下代码

<Button Tag="pack://siteoforigin:,,,/Apple.png">
        <Button.Template>
            <ControlTemplate>
                <Border HorizontalAlignment="Center" VerticalAlignment="Center">
                    <Image Source="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Tag}" Stretch="None" />                        
                </Border>
            </ControlTemplate>
        </Button.Template>
    </Button>


当我使用此代码时,图像根本不显示。这很有效。如何获得图像被“按下”的效果(需要显示被按下的图像),因为您更换了按钮模板,您必须自己在模板中重新实现所有这些效果(按下、鼠标悬停、聚焦等)。有很多例子可以说明如何做到这一点。