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>