2010-02-10 2 views
5

Desidero attivare o disattivare l'opacità di un controllo (pulsante, casella di testo, pannello, ecc.) Nel mio progetto WPF e volevo controllare se avevo eseguito correttamente.Dissolvenza di qualsiasi controllo utilizzando un'animazione WPF

La mia domanda è: È questo il tipo di funzionalità che normalmente si scrive in XAML o si utilizzerà un codice simile a quello seguente per ottenere il risultato di dissolvenza in apertura/dissolvenza?

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

Come probabilmente puoi dire che sono molto, molto nuovo a WPF.

Grazie

risposta

1

tendo a trovare in luoghi in cui ho bisogno per eseguire un'azione dopo un'animazione o dove l'animazione è dipendente complesso trigger che il code-behind è il posto migliore, altrimenti la XAML è un buon posto dove mettere l'animazione. (Solitamente lo faccio per cose come transizioni o semplici tipi di eventi "onclick"