2016-01-11 119 views
1

我在这种方式定义的WPF中有一个矩形;更改填充属性时动画矩形的颜色

<Rectangle x:Name="redBrush" Width="20" Height="20" Fill="{Binding RectColor}" Stroke="Black" RadiusX="2" RadiusY="2"> 

我想动画从一个到另一个颜色的变化。

我试着像这样的东西:

<Rectangle x:Name="redBrush" Width="20" Height="20" Fill="{Binding NewColor}" Stroke="Black" RadiusX="2" RadiusY="2"> 
     <Rectangle.Triggers> 
      <EventTrigger RoutedEvent="Rectangle.MouseEnter"> 
       <BeginStoryboard> 
        <Storyboard> 
         <ColorAnimation Storyboard.TargetName="redBrush" 
         Storyboard.TargetProperty="(Rectangle.Fill).Color" To="{Binding NewColor}" Duration="0:0:3" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Rectangle.Triggers> 
    </Rectangle> 

但我有两个问题,这种方法。我必须使用哪个RoutedEvent?并且ColorAnimation中的To =属性不起作用。

你能帮我吗?谢谢

回答

0

故事板是可冻结的对象,您不能使用绑定来设置它们的属性。

一种解决方法将产生一个Storyboard每次填写DP改为:

private SolidColorBrush _rectColor; 
public SolidColorBrush RectColor { 

    get {return _rectColor;} 
    set { 
     _rectColor = value; 
     _sbFillAnimation= CreateFillAnimationStoryboard(_rectColor); 
     _sbFillAnimation.Begin(); 
    } 
} 

private Storyboard _sbFillAnimation; 

private Storyboard CreateFillAnimationStoryboard(SolidColorBrush rectColor) { 
    Storyboard sb = new Storyboard() { Duration = TimeSpan.FromSeconds(3), BeginTime = TimeSpan.Zero}; 

    ColorAnimation colAnim = new ColorAnimation(); 
    colAnim.From = rectColor.Color; 
    colAnim.To = Colors.Gray; 
    colAnim.Duration = new Duration(TimeSpan.FromSeconds(3)); 
    colAnim.AutoReverse = false; 

    sb.Children.Add(colAnim); 

    Storyboard.SetTarget(colAnim, redBrush); 
    Storyboard.SetTargetProperty(colAnim, new PropertyPath("Fill.Color")); 


    return sb; 
} 
+0

谢谢您的答复。这个想法似乎真的很好。你有想法,为什么我的错误 Storyboard.SetTargetProperty(ca,new PropertyPath(“(Rectangle.Fill).Color”)); ? “无法解析属性路径'(Rectangle.Fill).Color'中的所有属性引用,请验证适用的对象是否支持这些属性。” – Lorenzo522

+0

啊......你再更新一次片段 – Lorenzo522

+0

mhmm ... 它对我不起作用 “无法解析属性路径中的所有属性引用'(Rectangle.Fill).Color'。验证适用的对象是否支持属性“。 – Lorenzo522