鼠标悬停时样式未应用于 WPF 按钮

Style not being applied to WPF button on mouse over

我已经为我的按钮定义了样式:

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

这显示了一个带有图像的按钮和图像下方的标签。 此外,在鼠标悬停时,底部的按钮边框显示为橙色,按下鼠标时它将其底部边框更改为绿色(请注意初始颜色已被覆盖。我有另一个按钮,我想将其底部边框显示为红色按下鼠标时不是绿色)。

我的问题是按钮的底部边框在鼠标悬停时没有显示为橙色。

更新:

正如 Mishka 所说,我忘记了边界...现在看看:

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

您的 ControlTemplate 中不存在任何对象(例如 'Border')来接收 BorderBrush 的值。

您需要用 Border 包裹您的控件,并将其值(如 BorderBrush 和 BorderThickness、TemplateBinding)绑定到 Button 上的属性:

<Border BorderBrush="{TemplateBinding BorderBrush}">
</Border>