如何将IsMouseOverProperty添加到样式中

时间:2016-11-24 14:40:53

标签: wpf

这里我将我的按钮定制为圆圈。但触发器内的属性不起作用。如果IsEnabled属性为false且IsMouseOver属性为true,我想将背景设置为红色。

<Style x:Key="CircleButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid >
                    <Ellipse Stroke="#003878"
                 StrokeThickness="2" >
                        <Ellipse.Fill>
                            <RadialGradientBrush>
                                <GradientStop Offset="0"
                                  Color="#003878" />
                                <GradientStop Offset="1"
                                  Color="#003878" />
                                <GradientStop Offset="1"
                                  Color="#003878" />
                                <RadialGradientBrush.Transform>
                                    <TransformGroup>
                                        <ScaleTransform ScaleY="0.65" />
                                    </TransformGroup>
                                </RadialGradientBrush.Transform>
                            </RadialGradientBrush>
                        </Ellipse.Fill>
                    </Ellipse>
                    <ContentPresenter HorizontalAlignment="Center"
                          VerticalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="#FFFFFF" />
    <Setter Property="FontSize" Value="12" />
    <Setter Property="FontFamily" Value="Calibri"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>

1 个答案:

答案 0 :(得分:1)

您的触发器设置的背景颜色被忽略,因为您更改了控件的模板。它不再是具有“背景”的标准按钮 - 而是使用自己的一组属性绘制椭圆。

你需要的是能够改变椭圆填充颜色的触发器,如下所示: -

<ControlTemplate.Triggers>
    <Trigger Property="IsEnabled" Value="False">
        <Setter TargetName="ellipse" Property="Fill" Value="Red"/>
    </Trigger>
    <Trigger Property="IsMouseOver" Value="True">
        <Setter TargetName="ellipse" Property="Fill" Value="Red"/>
    </Trigger>
</ControlTemplate.Triggers>

将此XAML放在<ControlTemplate>元素中,并删除现有的<Style.Triggers>部分。

还要注意上面XAML中的TargetName属性,因此setter知道模板中的哪个控件要定位。因此,您必须为椭圆添加一个名称,如下所示: -

<Ellipse x:Name="ellipse" Stroke=.... >

(我的示例仅更改椭圆的填充,因此您可能希望添加更多触发器以使用相同的方法将笔触颜色更改为红色。)