2010-02-10 12 views
5

Ich möchte die Deckkraft eines Steuerelements (Button, TextBox, Panel, etc) in meinem WPF-Projekt und wollte überprüfen, ob ich es richtig gemacht hatte.Fade jedes Steuerelement mit einer WPF-Animation

Meine Frage ist: Ist dies die Art von Funktionalität, die Sie normalerweise in XAML schreiben würden oder würden Sie Code ähnlich dem unten verwenden, um das Einblenden/Ausblenden Ergebnis zu erzielen?

internal static class AnimationExtensions 
{ 
    internal enum TransitionSpeed 
    { 
     Instant = 0, 
     Fast = 100, 
     Normal = 200, 
     Slow = 500 
    } 

    /// <summary> 
    /// Toggles the opacity of a control. 
    /// </summary> 
    /// <param name="control">The control.</param> 
    internal static void ToggleControlFade(this Control control) 
    { 
     control.ToggleControlFade(TransitionSpeed.Normal); 
    } 

    /// <summary> 
    /// Toggles the opacity of a control. 
    /// </summary> 
    /// <param name="control">The control.</param> 
    /// <param name="speed">The speed.</param> 
    internal static void ToggleControlFade(this Control control, TransitionSpeed speed) 
    { 
     Storyboard storyboard = new Storyboard(); 
     TimeSpan duration = new TimeSpan(0, 0, 0, 0, (int)speed); // 

     DoubleAnimation animation = new DoubleAnimation { From = 1.0, To = 0.0, Duration = new Duration(duration) }; 
     if (control.Opacity == 0.0) 
     { 
      animation = new DoubleAnimation { From = 0.0, To = 1.0, Duration = new Duration(duration) }; 
     } 

     Storyboard.SetTargetName(animation, control.Name); 
     Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity", 0)); 
     storyboard.Children.Add(animation); 

     storyboard.Begin(control); 
    } 
} 

Wie Sie wahrscheinlich sagen können, bin ich sehr, sehr neu zu WPF.

Dank

Antwort

1

ich an Orten zu finden sind in der Regel, wo ich eine Aktion nach einer Animation oder wo die Animation ist abhängig von komplexen auszuführen auslöst, dass der Code-behind der beste Ort ist, da sonst die XAML ist eine gute Ort, um die Animation zu platzieren. (Normalerweise mache ich das für Dinge wie Übergänge oder einfache 'onclick'-Ereignisse.