2013-06-25 22 views
0

我正在设计一个自定义按钮,并且想要将它的背景更改为LinearGradientBrush,时间为MouseOver。这是我的尝试:动画Button.Background到MouseOver上的LinearGradientBrush

<UserControl Height="Auto" Width="Auto"> 
<UserControl.Resources> 
    <LinearGradientBrush x:Key="toBackgroundBrush" EndPoint="0,1" StartPoint="0,0"> 
     <GradientStop Color="#FFC8C8C8" Offset="1"/> 
     <GradientStop Color="#FF626161" Offset="0.599"/> 
     <GradientStop Color="#FF787878" Offset="0.497"/> 
     <GradientStop Color="#FF939393" Offset="1"/> 
    </LinearGradientBrush> 
</UserControl.Resources> 

<Grid> 
    <Button Content="Button" Foreground="#FFFFFEFE" Height="30" Width="120"> 
     <Button.Background> 
      <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
       <GradientStop Color="#FFC8C8C8" Offset="0"/> 
       <GradientStop Color="#FF626161" Offset="0.539"/> 
       <GradientStop Color="#FF787878" Offset="0.467"/> 
       <GradientStop Color="#FF939393" Offset="1"/> 
      </LinearGradientBrush> 
     </Button.Background> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Trigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <ColorAnimation 
                Storyboard.TargetProperty="Background" 
                AutoReverse="True" 
                Duration="0:0:0.25" 
                To="{StaticResource toBackgroundBrush}"> 
            </ColorAnimation> 
           </Storyboard> 
          </BeginStoryboard> 
         </Trigger.EnterActions> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
</Grid> 

然而,当我运行代码,我得到这个异常:

Cannot convert the value in attribute 'To' to object of type 
'System.Nullable`1[[System.Windows.Media.Color, PresentationCore, Version=3.0.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35]]'. 
'System.Windows.Media.LinearGradientBrush' is not a valid value for property 'To'. 

我最初打算动画在Blend的MouseOver事件,但没不会覆盖默认模板,所以我最终使用故事板进行“手动”操作。我不明白为什么LinearGradientBrush对于属性To不是有效值,因为To确实指向按钮上的Background属性。任何帮助表示赞赏。

+0

看看这个SO问题是否有帮助http://stackoverflow.com/questions/4050032/animation-change-from-lineargradientbrush-to-solidcolorbrush –

+0

@MarkHall我试过了......不改变任何东西,颜色保持不变更改为默认的Windows按钮样式。 – PoweredByOrange

+0

“笔刷”不是“颜色”。因此,您不能使用ColorAnimation对'Brush'类型的'Background'进行动画制作,并且不能将'Brush'分配给'Color'类型的'To'属性。 – Clemens

回答