Le applicazioni Silverlight sono un misto di assembly .NET, risorse e markup XAML che vengono inglobati e compressi tramite ZIP in un file con estensione .xap. Quando poi il browser carica la pagina, il tag object specifico di Silverlight carica tale file dal server per eseguirne il contenuto. Qualora però questo file sia di grosse dimensioni, l'esecuzione dell'applicazione viene ritardata finché questo non viene completamente caricato. Per intrattenere e notificare l'utente che è in corso il caricamento, il plugin di Silverlight dispone già di un preloader standard che mostra la percentuale di caricamento.
Ciò nonostante è consentito attraverso un parametro indicare un preloader personalizzato così da poter inserire altre informazioni e cambiare layout. Per usufruire di questa funzionalità il controllo Silverlight per ASPNET, contenuto nell'assembly System.Web.Silverlight e disponibile con SDK, dispone della proprietà SplashScreenSource che permette di indicare il file XAML da caricare per la fase iniziale. Poiché il runtime non è ancora pronto e si vuole tenere più leggera possibile la fase di preloading, non è possibile usare codice managed, ma semplicemente affidarsi a codice JavaScript. Infatti oltre allo splash screen da utilizzare, si può indicare con onPluginSourceDownloadProgressChanged la funzione da richiamare quando la percentuale di caricamento cambia e poter quindi intervenire sugli elementi presenti nel file XAML.
Ecco quindi come configurare il controllo:
<asp:Silverlight ID="player" runat="server" Source="~/ClientBin/PreloaderTest.xap" MinimumVersion="2.0.30523" Width="100%" Height="100%" SplashScreenSource="~/Preloader.xaml" onpluginsourcedownloadprogresschanged="onSouceDownloadProgressChanged" />
Il file preloader.xaml contiene del semplice markup per mostrare la percentuale e una progress bar di caricamento:
<Canvas Canvas.Top="298.834" Canvas.Left="249.329" Width="357" Height="31.379"> <Rectangle Width="27.545" Height="1" Fill="Green" Canvas.Top="29.545"> <Rectangle.RenderTransform> <TransformGroup> <ScaleTransform x:Name="uxProgressBar" ScaleX="1" ScaleY="0" /> <RotateTransform Angle="270" /> </TransformGroup> </Rectangle.RenderTransform> </Rectangle> <TextBlock x:Name="uxStatus" Height="25" Canvas.Left="125" Text="Caricamento..." TextWrapping="Wrap" Canvas.Top="3.16" />
Per agire poi sulla TextBox e sul Rectangle per variare la sua dimensione, si definisce una funzione che viene chiamata più volte, a discrezione del plugin:
function onSouceDownloadProgressChanged(sender, args) { var p = $get("player").content; p.findName("uxStatus").Text = "Caricamento " + Math.round(args.get_progress() * 100) + "%"; p.findName("uxProgressBar").ScaleY = args.get_progress() * 356; }
Nel codice precedente si noti l'uso della proprietà content per accendere all'elemento radice del file XAML e il metodo findName per cercare gli elementi e agire sulle rispettive proprietà .NET. Per rendere visibile l'effetto e far durare il caricamento in fase di test, si consiglia di inserire nel progetto Silverlight un file di 5/10 MB con build action impostata su Resource.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Creare un messaggio di posta in diversi formati con ASP.NET 2.0
- Caricare un DTO esposto da un servizio tramite una query LINQ to Entities in Entity Framework
- Utilizzare il metodo reduce in #javascript https://aspit.co/ccc di @morwalpiz
- Elencare gli utenti di un dominio NT con ADSI
- Utilizzare SQL e #linq per eseguire una query con #entityframework Core https://aspit.co/bfv di @sm15455 #efcore1
- Disponibile il codice sorgente di ASP.NET MVC
- Concludiamo in bellezza con Giancarlo Sudano di Microsoft: q# for quantum programming Siamo in live streaming da: https://aspit.co/netconf-22 #aspilive #netconfit
- Caricare i dati di configurazione allo startup di un'applicazione Angular
- rilasciati nuovi template per la #aspnet web pages. funzionano anche con #webmatrix: http://u.aspitalia.com/lu
- Creare automaticamente una pipeline YAML da una sua definizione in Azure DevOps