Silverlight:使用GradientBrush资源进行状态动画

时间:2011-01-03 13:06:27

标签: silverlight gradient visualstatemanager brush

我有一组控件(Button,ToggleButton)我想拥有相同的样式,所以我在ResourceDictionary中为普通/禁用/启用状态创建了一些渐变画笔,例如“ButtonFillBrush”,“ButtonFillMouseOverBrush”等。这些被定义为全局可重用的画笔资源。

我知道可以在状态内的动画中更改渐变的各个停靠点,例如:

<VisualState x:Name="MouseOver">
   <Storyboard>
      <ColorAnimation Duration="0" To="#FF041D06" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="path" d:IsOptimized="True"/>
      <ColorAnimation Duration="0" To="#FF118519" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="backgroundRectangle" d:IsOptimized="True"/>
    </Storyboard>
</VisualState>

现在,我知道在VisualState Manager中可以执行以下操作:

<VisualState x:Name="MouseOver">
   <Storyboard>
      <ColorAnimation Duration="0" To="ButtonFillMouseOverBrush" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush)" Storyboard.TargetName="backgroundRectangle" d:IsOptimized="True"/>
    </Storyboard>
</VisualState>

谢谢!

更新:使用有关使用StaticResource引用的答案以及更多搜索:http://wildermuth.com/2008/07/18/Animating_Brushes_with_ObjectAnimationUsingKeyFrames

<VisualState x:Name="MouseOver">
  <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="backgroundRectangle"                      
Storyboard.TargetProperty="Fill">
      <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource ButtonFillMouseOverBrush}" />
    </ObjectAnimationUsingKeyFrames>
  </Storyboard>
</VisualState>

所以,拥有一个BrushAnimation或其他东西会很好......

罗吉尔

1 个答案:

答案 0 :(得分:0)

您可以找到有关资源词典和资源的更多信息。使用它们here。但是,对于您的颜色动画问题,可以在此链接上找到有关Silverlight动画(包括颜色动画)的大量信息Silverlight Animations Quickstart