WPF-显示边框、图像和触发器的按钮

WPF-显示边框、图像和触发器的按钮,wpf,image,button,triggers,border,Wpf,Image,Button,Triggers,Border,我正在尝试实现一个带有边框和图像的按钮: <Button Style="StaticResource HomeButton}"> <Image Source="{StaticResource icon_1}" Stretch="Uniform" Margin="10"/> </Button> 这就是样式(HomeBorder仅设置BorderBrush、BorderThickness和CornerRadius):

我正在尝试实现一个带有边框和图像的按钮:

      <Button Style="StaticResource HomeButton}">
        <Image Source="{StaticResource icon_1}" Stretch="Uniform" Margin="10"/>
    </Button>

这就是样式(HomeBorder仅设置BorderBrush、BorderThickness和CornerRadius):


问题是,仅当我单击(或将鼠标移到)边框线或图像时,它才会更改背景色。 我尝试了很多这样的变通方法:

<Button x:Name="btnProva" Background="Transparent"
            HorizontalContentAlignment="Stretch"
            VerticalContentAlignment="Stretch">
        <Border>
            <Image Source="{StaticResource icon_1}" Stretch="Uniform" Margin="10"/>
            <Border.Style>
                <Style TargetType="{x:Type Border}" >
                    <Setter Property="Background" Value="Transparent"/>
                    <Setter Property="BorderBrush" Value="White"/>
                    <Setter Property="BorderThickness" Value="2"/>
                    <Setter Property="CornerRadius" Value="20"/>
                    <Style.Triggers>
                        <Trigger Property="Button.IsPressed" Value="True">
                            <Setter Property="Background" Value="Yellow"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
    </Button>


…在这种情况下,IsMouseOver起作用,但IsPressed trigger更改的颜色超出了边框的限制。

您需要使用背景属性绑定更新按钮顺序:

<Border x:Name="ButtonBorder"
    Background="{TemplateBinding Background}" <--- RIGHT HERE
    Style="{StaticResource HomeBorder}">
    <ContentPresenter x:Name="contentPresenter"
        Margin="{TemplateBinding Margin}"
        HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
        VerticalAlignment="{TemplateBinding VerticalAlignment}"
        Content="{TemplateBinding Content}"
        ContentTemplate="{TemplateBinding ContentTemplate}" />
</Border>

这个解决方案非常适合我!非常感谢你。我想我需要更好地理解“TemplateBinding”的用途。
TemplateBinding
是指向
ControlTemplate
TargetType
属性的绑定快捷方式。它与
“{Binding RelativeSource={RelativeSource TemplatedParent}}”相同
<代码>模板绑定
创建快速单向绑定。
<Border x:Name="ButtonBorder"
    Background="{TemplateBinding Background}" <--- RIGHT HERE
    Style="{StaticResource HomeBorder}">
    <ContentPresenter x:Name="contentPresenter"
        Margin="{TemplateBinding Margin}"
        HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
        VerticalAlignment="{TemplateBinding VerticalAlignment}"
        Content="{TemplateBinding Content}"
        ContentTemplate="{TemplateBinding ContentTemplate}" />
</Border>