Silverlight offre la possibilità di animare gli elementi dell'interfaccia utente. Possiamo considerare un'animazione in Silverlight come un modo per modificare il valore di una Dependecy Property in un certo intervallo di tempo. Ad esempio possiamo modificare la proprietà Width e cambiare la dimensione di un Button quando viene cliccato.
Le caratteristiche fondamentali di un'animazione sono:
Ecco un esempio di definizione di una animazione:
<DoubleAnimation From="150" To="300" Duration="0:0:3" />
Possiamo utilizzare questa definizione per agire su una qualsiasi Dependency Property di tipo double.
Silverlight fornisce diverse implementazioni di Animation per i diversi tipi di proprietà, oltre a DoubleAnimation esistono ColorAnimation e PointAnimation, rispettivamente per modificare tipi Color e Point. Anche se poche, queste implementazioni soddisfano la maggior parte degli scenari, nei rari casi in cui così non fosse, possiamo creare una Custom Animation.
Il precedente frammento di codice XAML indica che, quando l'animazione entrerà in gioco, una proprietà di tipo double, passera dal valore 150 a 300 in 3 secondi. La velocità di esecuzione (rate) sarà automaticamente calcolata sulla base degli attributi applicati all'animazione.
Nella seguente tabella sono indicate le proprietà condivise da tutti i tipi di animazione:
| Attributo | Descrizione |
|---|---|
From | Il valore iniziale per l'animazione |
To | La fine del valore per l'animazione |
By | Un valore relativo che indica di quanto cambiare l'animazione (un approccio alternativo all'utilizzo di To) |
Duration | La durata di un animazione, utilizzando la sintassi "hh: mm: ss" (ore, minuti, secondi) |
AutoReverse | Se inverte l'animazione quando è finita (ad esempio, reimposta la dimensione originale del controllo) |
RepeatBehavior | Cosa fare quando l'animazione è terminata; è possibile indicare una durata totale, un certo numero di ripetizioni o se l'animazione deve ripetere all'infinito |
Il passo successivo è incapsulare l'animazione all'interno di un oggetto Storyboard ed indicare, tramite le Attached Properties Storyboard.TargetName e Storyboard.TargetProperty, quel è la proprietà dell'elemento grafico sul quale applicare l'animazione.
Sempre grazie a Storyboard possiamo gestire vari aspetti inerenti l'esecuzione, come l'avvio e l'interruzione. Questa classe sarà dettagliata nella prossima lezione, adesso sarà utilizzata solo per la semplice esecuzione. Vediamo il codice necessario a creare l'animazione descritta ad inizio lezione:
<Canvas x:Name="LayoutRoot" Background="Azure">
<Canvas.Resources>
<Storyboard x:Name="MyStoryboard"
Storyboard.TargetName="MyButton"
Storyboard.TargetProperty="Width">
<DoubleAnimation From="150" To="300" Duration="0:0:3" />
</Storyboard>
</Canvas.Resources>
<Button Canvas.Left="25" Canvas.Top="40"
FontSize="20"
Width="150"
Content="Cliccami"
x:Name="MyButton"
Click="MyButton_Click" />
</Canvas>
Nel gestore dell'evento Click lanciamo l'animazione con il metodo Begin:
private void MyButton_Click(object sender, RoutedEventArgs e)
{
MyStoryboard.Begin();
}
Figura 46. Effetto dell'esempio
Storyboard permette di raggruppare diverse animazioni, ognuna con le proprie caratteristiche. Possiamo anche agire su proprietà diverse di elementi diversi semplicemente utilizzando le solite Attached Properties (Storyboard.TargetName e Storyboard.TargetProperty) sugli elementi animazione anziché su Storyboard. Come esempio modifichiamo la dimensione ed il colore di riempimento di un rettangolo.
<Canvas x:Name="LayoutRoot" Background="Azure">
<Canvas.Resources>
<Storyboard x:Name="MyStoryboard">
<DoubleAnimation From="150" To="300" Duration="0:0:3"
Storyboard.TargetName="MyRectangle"
Storyboard.TargetProperty="Width" />
<ColorAnimation From="Green" To="Orange" Duration="0:0:3"
Storyboard.TargetName="MyBrush"
Storyboard.TargetProperty="Color" />
</Storyboard>
</Canvas.Resources>
<Rectangle x:Name="MyRectangle"
Canvas.Left="25" Canvas.Top="40"
Width="150" Height="50"
Margin="20,5,20,5"
HorizontalAlignment="Left"
MouseLeftButtonUp="MyRectangle_MouseLeftButtonUp">
<Rectangle.Fill>
<SolidColorBrush x:Name="MyBrush" Color="Green" />
</Rectangle.Fill>
</Rectangle>
</Canvas>
Il codice per eseguire l'animazione è identico a prima, solo che questa volta verrà inserito all'interno dell'handler dell'evento MouseLeftButtonUp.
Figura 47. Stati di inizio e fine dell'animazione
Guardando al codice ci si può chiedere se la proprietà Fill non poteva essere impostata utilizzando la sintassi Fill="Green". Abbiamo dichiarato il colore in questo modo per una questione di tipo di dato: il valore letterale in realtà rappresenta un elemento di tipo Brush e non Color, quindi non modificabile tramite ColorAnimation. La soluzione al problema consiste nel definire Fill tramite Property Element, utilizzando un oggetto SolidColorBrush ed applicandogli un nome. In questo modo possiamo risalire alla proprietà Color di quest'ultimo (Storyboard.TargetName="MyBrush" e Storyboard.TargetProperty="Color") ed applicargli una ColorAnimation. Grazie a questi meccanismi, anche con i pochi oggetti Animation disponibili, possiamo animare qualsiasi elemento.
LINQ e la trappola della 'deferred execution'Una "trappola" in cui si può incappare utilizzando il risultato di... |
C#, le Custom Type ConversionConversioni personalizzate tra classi, creare metodi particolari per... |
Introduzione a Entity FrameworkIl framework ORM messo a disposizione da .NET |
Repeater: visualizzare un feed RSSUtilizzare il controllo XMLDataSource e sfruttare il metodo XPath()... |
Repeater, il server control "semplice"Cos'è e come funziona il controllo Repeater |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Guida Visual Studio 2010L'ambiente di sviluppo di riferimento per sviluppare applicazioni su... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |