2011-07-11 86 views
0

我想在WPF中做一個coloranimation,這樣一個新暴露的UI元素會隨着時間的推移呈現出隨着時間的推移而變白的紅色邊框。這裏是我的代碼:ColorAnimation幫助?

 SolidColorBrush toFade = new SolidColorBrush(Colors.Red); 

    private void showElement(SuperTB.SuperTextB toShow) 
    { 
     toShow.Visibility = Visibility.Visible; 
     toShow.BorderBrush = toFade; 

     ColorAnimation fadeToWhite = new ColorAnimation(); 
     fadeToWhite.To = Colors.White; 
     fadeToWhite.Duration = TimeSpan.FromSeconds(1); 
     Storyboard.SetTargetName(fadeToWhite, "toFade"); 
     Storyboard.SetTargetProperty(fadeToWhite, new PropertyPath(SolidColorBrush.ColorProperty)); 
     Storyboard fade = new Storyboard(); 
     fade.Children.Add(fadeToWhite); 
     fade.Begin(this); 
    } 

,在我的主窗口的構造函數我有

this.RegisterName("toFade", toFade); 

當方法被調用時,所需的元素出現,但沒有色彩的動畫。我究竟做錯了什麼?

回答

0

我會直接告訴你,我只在代碼中完成動畫,而且很可怕。然後,我在VS2008中用XAML手動製作了一段動畫,這很可怕。然後我得到了一個copy of Expression Blend,並在設計師動畫...

非常容易,它看起來更好,因爲我可以更精確地控制動畫。幫你一個忙,並得到Blend,這是完全值得的。這需要一點習慣,但從長遠來看,這將是一個巨大的節省時間。

+0

我很想知道,雖然Blend可能是最好的一堆它仍然生成代碼,我自己並不喜歡所有的東西,我更喜歡手寫代碼,因爲然後我知道一切都在哪裏以及它是如何構造的。此外,如果你這樣做了一段時間,C#或XAML中的動畫也變得非常自然。 –

+0

@ H.B。爲教育目的生成代碼沒有任何問題。看看它是如何完成的,然後使用這些信息來加強。 :) –

+0

確實。一旦你進入Blend的動畫,你可能會發現有些事情你只能在設計師中做。路徑動畫,緩動函數,偏移動畫等。我只能想象將工作放入動畫中的一個項目上,該項目本身正在移動。 – CodeWarrior

0

你太複雜了,我會說,你只有一個動畫,所以不需要故事板,只需在Brush上調用BeginAnimation即可。例如

Action<TextBox> animMethod = (TextBox x) => 
    { 
     var brush = new SolidColorBrush(Colors.Red); 
     x.Visibility = Visibility.Visible; 
     x.BorderBrush = brush; 
     brush.BeginAnimation(SolidColorBrush.ColorProperty, new ColorAnimation(Colors.White, TimeSpan.FromSeconds(1))); 
    }; 
animMethod(tbtest); 

另外,如果你必須使用一個代碼背後的故事板做使用TargetName財產,但僅僅是Target財產,你有一個適當的參考,而不是僅僅名稱。