我为我的按钮定义了一个样式:
<Style x:Key="MyStyle" TargetType="{x:Type Button}">
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0 0 0 3"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="Orange" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="BorderBrush" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
现在,我将它应用于WPF按钮,如下所示:
<Button>
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource MyStyle}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<StackPanel Orientation="Vertical">
<Image Height="20" Width="20" Stretch="UniformToFill" Source="./Resources/Add.png"/>
<Label HorizontalAlignment="Center">Add</Label>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="BorderBrush" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
这会在图像下方显示一个带有图像和标签的按钮。 此外,鼠标悬停时,底部的按钮边框显示为橙色,按下鼠标时,它的底部边框变为绿色(请注意,初始颜色已被覆盖。我有另一个按钮,我想显示其底部边框为红色鼠标按下时不是绿色的。)
我的问题是鼠标悬停时按钮的下边框没有显示为橙色。
更新:
正如米什卡说我忘了边界......现在看:
<Button>
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource MyStyle}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<StackPanel Orientation="Vertical">
<Image Height="20" Width="20" Stretch="UniformToFill" Source="./Resources/Add.png"/>
<Label HorizontalAlignment="Center">Add</Label>
</StackPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="BorderBrush" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
答案 0 :(得分:1)
ControlTemplate中不存在任何对象(如“边框”)以接收BorderBrush的值。
您需要使用Border包装控件,并将其值设置为BorderBrush和BorderThickness,将TemplateBinding设置为Button上的属性:
<Border BorderBrush="{TemplateBinding BorderBrush}">
</Border>