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); 
}