Technology Experience (Reborn 3)

Contenuti gestiti da Igor Damiani
posts - 895, comments - 1334, trackbacks - 81

My Links

News














  • Questo blog nasce dalle ceneri del mio blog tecnico su UGIdotNET. In questo blog voglio raccontare la mia vita, ovvero quello che non mi sento più di raccontare da nessun'altra parte. Non sono solo un programmatore, dannazione: sono una persona che ha una terribile passione per il proprio lavoro. Ma anche passione per la vita, per le donne, per la birra, per la mia Fiat 500, per il sole ed il mare, per la scrittura, per qualche risata con gli amici, per i sentimenti. Qua troverete tutto questo: buona lettura!.

    23/04/2007,
    Sant'Angelo Lodigiano

Tag Cloud

Archives

Post Categories

Amici

WPF: accelerare un'animazione per arrivare velocemente alla fine

In un'applicazione WPF che sto programmando nel tempo libero ho creato un'animazione che parte automaticamente all'apertura della Window principale dell'applicazione stessa. Essa prepara l'interfaccia utente con un po' di "effetti speciali":

  • il titolo dell'applicazione appare con un fade-in
  • stessa cosa per il background, ma con un leggero ritardo rispetto al titolo
  • altre scritte appaiono ruotando e spostandosi velocemente sullo schermo, posizionandosi vicino al titolo
  • poi appare il menù principale, anch'esso con un fade-in
  • il logo VivendoByte viene posizionato in basso a destra sullo schermo

Va da sè che l'animazione viene applicata a diversi elementi dell'interfaccia utente definita nello XAML ed impiega 5 secondi per il completamento. Sebbene possa essere divertente da vedere, posso capire che l'utente voglia - in certi momenti - essere più sbrigativo e saltare direttamente alla fine per avere l'interfaccia utente pronta all'uso, senza perdersi in convenevoli ed effetti speciali che magari vorrebbe evitare.

La domanda di questa sera quindi è: posso accelerare l'animazione facendo in modo che balzi alla fine senza far aspettare l'utente che sta davanti allo schermo? La risposta è ovviamente sì.

Vediamo come fare. Diamo un'occhiata al costruttore della Window:

1 public StartWindow() 2 { 3 InitializeComponent(); 4 anim = (Storyboard)this.FindResource("FadeInStoryboard"); 5 6 this.MouseUp += delegate(object sender, MouseButtonEventArgs args) 7 { 8 anim.SetSpeedRatio(this, 8.0); 9 }; 10 11 // Start the animation and make it controllable via code 12 anim.Begin(this, true); 13 }

Alla linea 4 otteniamo l'istanza di Storyboard che si chiama "FadeInStoryboard". Come abbiamo visto, l'animazione fa molte più cose di un semplice fade-in, ma il nome è rimasto così. Poco male.

Alla linea 6 ci sottoscriviamo all'evento MouseUp della Window e ad adesso assegnamo un event handler tramite un anonymous method. In pratica...se l'utente clicca sulla finestra viene settata una nuova velocità all'animazione (metodo SetSpeedRatio). In questo caso, la velocità viene moltiplicata per un fattore 8.0. Invece di 5 secondi, il tutto termina in pochi istanti.

Cosa importante: ricordiamoci sempre che se vogliamo controllare l'animazione via codice C# dobbiamo farla partire da codice. La linea 12 fa proprio questo: la chiamata al metodo Begin della classe Storyboard ha due overloads. Il primo parametro è l'oggetto Window, il secondo è un booleano che indica se l'animazione deve poter essere controllata da codice oppure no. Se questo secondo parametro venisse omesso o valesse false, la chiamata a SetSpeedRatio non sortirebbe alcun effetto. La stessa cosa vale per tutti i metodi o proprietà che in qualche modo interagiscono sull'animazione (Seek, SkipToFill, AccelerationRatio, etc.).

Technorati Tags:     

Print | posted on mercoledì 23 aprile 2008 23.12 | Filed Under [ .NET World ]

Feedback

Gravatar

# WPF: accelerare un'animazione per arrivare velocemente alla fine (Versione NoCode)

WPF: accelerare un'animazione per arrivare velocemente alla fine (Versione NoCode)
24/04/2008 0.14 | Corrado's BLogs

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 6 and 4 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET