2017-06-04 110 views
-1

我尝试下面的代码,但有一些错误线 “Storyboard.SetTargetProperty(CA1,新的PropertyPath(” GradientStop.ColorProperty“));如何动画渐变停止颜色?

sb.Begin(本)抛出一个InvalidOperationException并不能解决“gradStop1.ColorProperty”。

如何正确动画渐变停止颜色?

private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     LinearGradientBrush lgb = new LinearGradientBrush(
      (Color)ColorConverter.ConvertFromString("#FF1E2838"), 
      (Color)ColorConverter.ConvertFromString("#FF2B364F"), 
      new Point(0.5, 0), 
      new Point(0.5, 1)); 
     UCBody.Background = lgb; 

     ColorAnimation ca1 = new ColorAnimation(
      (Color)ColorConverter.ConvertFromString("#FF1E2838"), 
      (Color)ColorConverter.ConvertFromString("#FF1E1E1E"), 
      TimeSpan.FromMilliseconds(600)); 

     ColorAnimation ca2 = new ColorAnimation(
      (Color)ColorConverter.ConvertFromString("#FF2B364F"), 
      (Color)ColorConverter.ConvertFromString("#FF2B2B38"), 
      TimeSpan.FromMilliseconds(600)); 

     Storyboard sb = new Storyboard(); 
     sb.Children.Add(ca1); 
     sb.Children.Add(ca2); 
     Storyboard.SetTargetName(ca1, "gradStop1"); 
     Storyboard.SetTargetProperty(ca1, new PropertyPath("GradientStop.ColorProperty")); 
     Storyboard.SetTargetName(ca2, "gradStop2"); 
     Storyboard.SetTargetProperty(ca2, new PropertyPath("GradientStop.ColorProperty")); 

     sb.Begin(this); 
    } 
} 
+2

你为什么不定义在XAML动画?它会更简单,你不会需要处理大量的转换也是如此。对XAML定义的渐变画笔进行动画处理也会更容易。我应该引导你这样做吗? –

+0

首先,使用'new PropertyPath(GradientStop.ColorProperty)'或'new PropertyPath(GradientStop.ColorProperty.Name)'来代替字符串。其次,什么是'gradStop1'和'gradStop2'?我看不到具有这些名称的对象在哪里定义。 – Maxim

+0

请记得投了有用的答案:) https://stackoverflow.com/help/privileges/vote-up – mm8

回答

0

您没有对象命名为‘gradStop1’或‘gradStop2’但你可以使用BeginAnimation动画LinearGradientBrush的渐变停方法:

private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    LinearGradientBrush lgb = new LinearGradientBrush(
     (Color)ColorConverter.ConvertFromString("#FF1E2838"), 
     (Color)ColorConverter.ConvertFromString("#FF2B364F"), 
     new Point(0.5, 0), 
     new Point(0.5, 1)); 
    UCBody.Background = lgb; 

    ColorAnimation ca1 = new ColorAnimation(
     (Color)ColorConverter.ConvertFromString("#FF1E2838"), 
     (Color)ColorConverter.ConvertFromString("#FF1E1E1E"), 
     TimeSpan.FromMilliseconds(600)); 

    ColorAnimation ca2 = new ColorAnimation(
     (Color)ColorConverter.ConvertFromString("#FF2B364F"), 
     (Color)ColorConverter.ConvertFromString("#FF2B2B38"), 
     TimeSpan.FromMilliseconds(600)); 

    lgb.GradientStops[0].BeginAnimation(GradientStop.ColorProperty, ca1); 
    lgb.GradientStops[1].BeginAnimation(GradientStop.ColorProperty, ca2); 
}