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

时间:2017-07-04 15:28:37

标签: wpf xaml visual-studio-2008 wpf-controls wpf-style

我为我的按钮定义了一个样式:

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

1 个答案:

答案 0 :(得分:1)

ControlTemplate中不存在任何对象(如“边框”)以接收BorderBrush的值。

您需要使用Border包装控件,并将其值设置为BorderBrush和BorderThickness,将TemplateBinding设置为Button上的属性:

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