2016-04-15 78 views
2

我使用带有渐变背景的wpf按钮。但背景不适用于鼠标悬停。我的代码有什么问题吗?wpf按钮悬停渐变不起作用

<Button x:Name="button1" Content="Login" HorizontalAlignment="Left" Margin="172,149,0,0" VerticalAlignment="Top" Width="91" Click="button_Click" Height="34" Foreground="Black"> 
     <Button.Style> 
      <Style TargetType="Button"> 
       <Setter Property="Background"> 
        <Setter.Value> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="#FF2B4702" Offset="1"/> 
          <GradientStop Color="#FFAFDE80" Offset="0"/> 
         </LinearGradientBrush> 
        </Setter.Value> 
       </Setter> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background"> 
          <Setter.Value> 
           <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
            <GradientStop Color="#FF2B4702" Offset="0"/> 
            <GradientStop Color="#FFAFDE80" Offset="1"/> 
           </LinearGradientBrush> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 

回答

2

按照MSDNMouseOverBackground模板是固定的。

为了改变你必须改变模板。

右键单击您的按钮并选择Edit Template =>Edit a Copy

你会得到一个模板是这样的:

<Window.Resources> 
    <ControlTemplate x:Key="ButtonBaseControlTemplate1" TargetType="{x:Type ButtonBase}"> 
     <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
      <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="Button.IsDefaulted" Value="True"> 
       <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
      </Trigger> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" TargetName="border" Value="#FFBEE6FD"/> 
       <Setter Property="BorderBrush" TargetName="border" Value="#FF3C7FB1"/> 
      </Trigger> 
      <Trigger Property="IsPressed" Value="True"> 
       <Setter Property="Background" TargetName="border" Value="#FFC4E5F6"/> 
       <Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/> 
      </Trigger> 
      <Trigger Property="ToggleButton.IsChecked" Value="True"> 
       <Setter Property="Background" TargetName="border" Value="#FFBCDDEE"/> 
       <Setter Property="BorderBrush" TargetName="border" Value="#FF245A83"/> 
      </Trigger> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/> 
       <Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/> 
       <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
</Window.Resources> 

在你可以改变所有你想要的属性模板。

+0

谢谢,我从你的回答中了解到。 – Neo

0

问题是你试图修改前景,而不是原始背景。

<Style.Triggers> 
    <Trigger Property="IsMouseOver" Value="True"> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="#FF2B4702" Offset="0"/> 
        <GradientStop Color="#FFAFDE80" Offset="1"/> 
       </LinearGradientBrush> 
       </Setter.Value> 
      </Setter> 
    </Trigger> 
</Style.Triggers> 
+0

不错的斑点,但那不行。该背景必须在模板中进行更改。 –

+0

是的,我错了,在提问时复制我的代码。我通过改变前景而不是背景来测试。谢谢回答。 – Neo

+0

不客气。 – allencage