2010-02-10 12 views
5

Quiero alternar la opacidad de un control (botón, cuadro de texto, panel, etc.) en mi proyecto WPF y quería verificar si lo había hecho correctamente.Fundir cualquier control usando una animación WPF

Mi pregunta es: ¿Es este el tipo de funcionalidad que normalmente escribiría en XAML o utilizaría un código similar al que se muestra a continuación para obtener el resultado de fundido de entrada/salida?

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

Como probablemente sepa, soy muy, muy nuevo en WPF.

Gracias

Respuesta

1

tiendo a encontrar en lugares en los que necesito para llevar a cabo una acción después de una animación o donde la animación depende de complejos factores desencadenantes que el código subyacente es el mejor lugar, de lo contrario el XAML es un buen lugar para poner la animación (Por lo general, hago esto para cosas como transiciones o eventos simples 'onclick'.

Cuestiones relacionadas