Silverlight: Animare un oggetto e sottoscrivere un evento.

Animare un oggetto
Un canvas è uno dei contenitori che possiamo usare in Silverlight.
Il Canvas è un contenitore non consigliato da Microsoft nelle WPF, perchè non
si autoridimensiona ed ha una posizione fissa all’interno dell’area, quindi il
suo utilizzo ritorna utile solo in casi particolari.
Purtroppo, attualmente è anche l’unico contenitore disponibile nella
versione 1.1, quindi lavoreremo con questo.
Seguendo la logica WPF immagino che in futuro avremo a disposizione
degli oggetti più carini.
 
Progetto
Una volta creato il nostro progetto i file disponibili saranno:
·         TestPage.html
·         Silverlight.js
·         Page.xaml
·         Page.xaml.cs
La TestPage.html e il file Silverlight.js sono i file di riferimento affinchè
l’applicazione possa caricare il plugin di Silverlight.
Il file su cui lavoreremo è Page.xaml e il relativo file managed
(useremo C#).
Il file Page.xaml si presenterà così:
 
<Canvasx:Name="parentCanvas"
        xmlns="http://schemas.microsoft.com/client/2007"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Loaded="Page_Loaded"
        x:Class="SilverlightContest.Page;assembly=ClientBin/SilverlightContest.dll"
        Width="640"
        Height="480"
        Background="White">
</Canvas>
 
Queste poche righe di XAML definiscono un Canvas di larghezza
uguale a Width e altezza Height e con un colore di fondo uguale a Background.
Niente di più facile immagino!
All’interno del nostro Canvas ne aggiungeremo un’altro che ci servirà
per indetificare un’area che useremo come pulsante.
 <Canvasx:Name="CanvasButtonCustomer"Background="Orange" Canvas.Left="0"
   Canvas.Top="10"Width="100"Height="40">
    <TextBlockFontFamily="Tahoma"FontSize="18"Text="Customers"/>
</Canvas>
 
L’elemento TextBlock all’interno del Canvas viene usato per scrivere in
un’area, in questo caso il canvas.
In pratica non abbiamo fatto altro che crea un’area denominata
CanvasButtonCustomer e gli abbiamo associato, posizione, colore,
grandezza e un testo al suo interno.
Ricordatevi che la proprietà x:Name è importante se avete intenzione
di far riferimento all’oggetto XAML tramite codice managed.
Definisce il nome della variabile da usare.
Una volta compilato il progetto nella directory obj/Debug
(se siamo in debug) troverete un file del tipo Page.g.cs dove al suo
interno troverete l’elenco delle variabili definite nell’XAML.
Storyboard
L’elemento Storyboard è fondamentale quando vogliamo creare
un’animazione di un oggetto.
Esistono vari tipi di animazioni:
·         ColorAnimation
·         ColorAnimationUsingKeyFrames
·         DoubleAnimation
·         DoubleAnimationUsingKeyFrames
·         PointAnimation
·         PointAnimationUsingKeyFrames
Oggi useremo una DoubleAnimation utile a cambiare le proprietà numeriche.
Lo Storyboard può partire o quando un oggetto viene caricato (esempio per
un’animazione che va in loop) o quando si determina un evento.
Noi utilizzeremo quest’ultimo caso.
Per far ciò bisogna definere un StoryBoard come Risorsa.
 <Canvas.Resources>
      <Storyboardx:Name="StoryBoardMenuOut"
                  Storyboard.TargetName="CanvasButtonCustomer"
                  Storyboard.TargetProperty="(Canvas.Left)">
        <DoubleAnimationTo="0"Duration="0:0:1"/>
    </Storyboard>
</Canvas.Resources>
 
Questo tipo di risorsa così definite varierà il valore di
 Canvas.Left in un secondo, portandolo al valore assoluto
in pixel uguale a 0.
Per delle animazioni e/o oggetti così semplici è utile
svilupparli a mano in modo da capir bene come lo
XAML funziona.
Per qualcosa di più complicato si consiglia l’uso di Blend 2,
attualmente in fase di sviluppo.
A questo punto il nostro file Page.xaml apparirà così:
<Canvasx:Name="parentCanvas"
        xmlns="http://schemas.microsoft.com/client/2007"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Loaded="Page_Loaded"
        x:Class="SilverlightContest.Page;assembly=
                        ClientBin/SilverlightContest.dll"
        Width="640"
        Height="480"
        Background="White"
        >
 
<Canvas.Resources>
      <Storyboardx:Name="StoryBoardMenuOut"
        Storyboard.TargetName="CanvasButtonCustomer"
                  Storyboard.TargetProperty="(Canvas.Left)">
        <DoubleAnimationTo="0"Duration="0:0:1"/>
    </Storyboard>
</Canvas.Resources>
 
<Canvasx:Name="CanvasButtonCustomer"Background="Orange"
          Canvas.Left="-90"Canvas.Top="10"
          Width="100"Height="40">
    <TextBlockFontFamily="Tahoma"FontSize="18"
Text="Customers"/>
</Canvas>
 
</Canvas>
 
Definizione di un evento
Tramite questa sezione si inizia ad intravedere una parte di ciò
che Silverlight 2 offrirà agli sviluppatori.
Mentre con la prima release eravamo sempre e comunque legati
a Javascript (cosa che noi odiamo), nella seconda release,
Javascript, verrà confinato in un angolino.
Ecco, ad esempio, come gestiremo un evento sul nostro canvas
usando codice managed.
File Page.xaml.cs:
public void Page_Loaded(object o, EventArgs e)
{
// Required to initialize variables
InitializeComponent();
 
CanvasButtonCustomer.MouseEnter += new MouseEventHandler(CanvasButton_MouseEnter);
}
 
void CanvasButton_MouseEnter(object sender, MouseEventArgs e)
{
StoryBoardMenuOut.Begin();
}
 
Chiunque di noi ha avuto a che fare con codice managed almeno
una volta, non avrà alcuna difficoltà a capire le righe di codice riportate su.
Con queste semplici righe di codice di XAML e di C#, abbiamo creato il nostro primo,
brutto, bottone animato.
Nei prossimi articoli proverò a spiegare gli altri elementi del, sin’ora, piccolo
Silverlight SDK, con la speranza di arrivare tutti pronti all’evento del rilascio.

 

Tags: