Una delle caratteristiche di base proprie di Silverlight è l'interazione dei device di input, come tastiera e mouse. Attraverso la gestione di questi strumenti è possibile realizzare un semplice effetto, molto simile a quello di uno screensaver, che azioni una qualsiasi operazione quando il mouse viene lasciato fermo per un certo periodo di tempo, all'interno dell'area della pagina coperta dal plug-in.
In nostro aiuto per il conteggio del tempo in cui il mouse non ha movimento viene la classe DispatcherTimer; tale classe rappresenta un vero e proprio timer nel quale possiamo impostare la frequenza con cui far scattare un evento. Questo timer viene poi aggiunto alla coda principale dei thread di Silverlight.
Nell'esempio seguente, quando viene creata una nuova istanza dell'UserControl principale della nostra applicazione, il timer viene inizializzato con un intervallo di tempo e viene fatto partire immediatamente.
public partial class Page : UserControl { private DateTime lastMovementTime; private DispatcherTimer timer; private TimeSpan baseTimeSpan = new TimeSpan(0, 0, 10); //10 secondi public Page() { InitializeComponent(); timer = new DispatcherTimer(); timer.Interval = baseTimeSpan; timer.Tick += new EventHandler(timer_Tick); timer.Start(); } //... }
Successivamente dobbiamo controllare se il mouse si stia muovendo o meno. A questo proposito basta gestire l'evento MouseMove sull'intero controllo Silverlight e, appoggiandosi su una variabile temporale, verificare che questa non sia uguale alla data corrente.
Se questa verifica ha un riscontro positivo e la nostra variabile risulta diversa dalla data e dall'ora correnti, stoppiamo e riavviamo il timer, poiché il mouse ha eseguito un movimento.
private void UserControl_MouseMove(object sender, MouseEventArgs e) { if (!lastMovementTime.Equals(DateTime.Now)) { lastMovementTime = DateTime.Now; if (timer != null) { timer.Stop(); timer.Start(); StopScreenSaver(); } } }
Se invece il mouse non viene mosso, il timer non viene mai stoppato e una volta trascorsi il numero di secondi definito, si scatena automaticamente l'evento Tick del nostro timer, permettendoci di effettuare operazioni, come ad esempio animazioni, che saranno eseguite fin quando il mouse rimarrà fermo.
void timer_Tick(object sender, EventArgs e) { StartScreenSaver(); }
I metodi StartScreenSaver e StopScreenSaver, omessi per lasciare libero spazio alla fantasia, possono contenere le effettive operazioni che si ha in mente di eseguire durante il periodo in cui il mouse non viene mosso. All'interno del file allegato a questo script, è possibile trovare una semplice animazione inserita a puro titolo d'esempio.
Un'applicazione del genere, seppur semplice, risulta molto utile nel caso in cui si voglia utilizzare un'applicazione Silverlight come presentazione da esporre, ad esempio, attraverso più monitor messi in esposizione o tramite apparecchi touch screen.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.