2016-11-24 117 views
1

这里我已将自定义按钮设置为圆形。但触发器内的属性不起作用。如果IsEnabled属性为false并且IsMouseOver属性为true,我想将背景设置为红色。如何将IsMouseOverProperty添加到样式中

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

使用[MultiTrigger](https://msdn.microsoft.com/en-us/library/system.windows.multitrigger(v = vs.110).aspx) – 3615

+0

@ 3615'IsMouseOver'不会触发_true_而按钮被禁用。 – Sam

+0

@萨姆罗杰,简单的多触发器将无法正常工作。没有注意触发属性名称。 – 3615

回答

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

(我的例子只是改变了椭圆形的填充,所以你可能会希望进一步增加触发器来笔触颜色变为红色,使用相同的方法)。

+0

这正是我一直在寻找的!谢谢 –

+0

@AnuHardin乐于提供帮助。请标记为已接受的答案! –

+0

对不起,我不能将它标记为答案,因为我的声望低于15。 –