Linguaggi e Controlli di Silverlight
Il plugin di Silverlight offre un ambiente di esecuzione CLR e una libreria di base del .NET Framework (BCL) ospitata nel browser dell'utente e utilizzata per eseguire il codice. Silverlight è una progressione di ASP.NET AJAX, che estende le capacità di Javascript attraverso una libreria Javascript in modo tale da rendere il codice Javascript maggiormente orientato agli oggetti e da fiornire maggiori funzionalità. Il motore di esecuzione di Silverlight estende ulteriormente Javascript e l'ambiente di esecuzione ospitato dal browser.
Dynamic Language Runtime (DLR)
Ci sono correntemente due versioni di Silverlight, la 1.0 e la 2.0. Nella versione 1.0 l'unico linguaggio supportato è Javascript mentre la versione 2.0 estende l'ambiente di esecuzione e fornisce l'opportunità di sviluppare applicazioni Silverlight usando linguaggi di programmazione diversificati. Inoltre la versione 2.0 non solo apre Silverlight CLR all'uso di più linguaggi ma permette anche ai linguaggi stessi di comunicare attraverso l'uso del Dynamic Language Runtime (DLR).
Un linguaggio di programmazione dinamico è tale per cui il linguaggio e l'esecuzione del linguaggio sono concepiti per estendere dinamicamente le capacità d'esecuzione a runtime dell'applicazione. Ad esempio, un linguaggio potrebbe essere in grado di caricare, compilare e assimilare codice che viene letto a tempo d'esecuzione ma non esiste a tempo di compilazione. La parte DLR di Silverlight permette di trarre vantaggio delle funzionalità dinamiche del linguaggio.
Console DLR
Microsoft ha sviluppato la Console DLR come metodo per testare il codice e le applicazioni Silverlight. Microsoft ha sviluppato la Console DLR per Microsoft CodePlex e l'ha resa liberamente disponibile agli sviluppatori per poter effettuare i propri esperimenti. La Console DLR è disponibile per il download sul sito ufficiale di Silverlight. La versione della DLR Console resa disponibile su CodePlex supporta la prototipizzazione XAML attraverso JScript e Python. La Console DLR viene mostrata nella figura sottostante.

Fig 1: DLR Console
JavaScript
Come menzionato in precedenza, nella prima versione di
Silverlight, Javascript era l'unic linguaggio che poteva
essere utilizzato. Creare applicazioni Silverlight usando
Javascript è molto semplice ma non è
un'opzione direttamente disponibile in Visual Studio. Ad
ogni modo sarà necessaria una piccola quantità
di codice da inserire a mano (nella sua forma più
semplice, meno di 10 linee di codice). Vediamo l'esempio
più semplice realizzabile, partendo con una pagina
HTML in cui inseriamo un tag <object>,
solitamente all'interno di un tag
<div> come mostrato nel codice riportato
in SimpleJS.htm. Javascript supporta la maggior parte delle
potenzialità di un linguaggio dinamico.
Es. 1: SimpleJS.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Silverlight JavaScript: esempio semplice</title>
</head>
<body>
<div id="SilverlightHost">
<object id="sl" height="400" width="800" type="application/ag-plugin">
<param name="source" value="Page.xaml" />
</object>
</div>
</body>
</html>
Si noti che il tag <param> identifica il
file Page.xaml da caricare. Il file XAML è
anch'esso estremamente semplice in questo esempio e lo
potete vedere qui sotto.
Es. 2: Page.xaml
<Canvas x:Name="parentCanvas"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="640"
Height="480"
Background="White">
<TextBlock x:Name="myText" FontFamily="Segoe UI"
FontSize="14" Text="Questo è un esempio" />
</Canvas>
L'esempio visto illustra la metodologia di includere Silverlight in una pagina HTML attraverso Javascript. Ad ogni modo, includendo il file Javascript che viene distribuito da Microsoft per l'utilizzo di Silverlight, la vostra implementazione sarà migliore. Ad esempio, avviserà l'utente di scaricare il plugin Silverlight se quest'ultimo non fosse già installato. Il codice qui sotto illustra l'implementazione di Silverlight in una pagina HTML facendo riferimento al file Javascript fornito.
Es.3: TestPage.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- salvato da url=(0014)about:internet -->
<head>
<title>Silverlight: pagina di test del progetto</title>
<script type="text/javascript" src="Silverlight.js"></script>
<script type="text/javascript" src="TestPage.html.js"></script>
<script type="text/javascript">
function onLoad (sender, args, root) {
var myText = root.findName("myText");
myText.FontSize = 40;
}
</script>
<style type="text/css">
.silverlightHost { width: 640px; height: 480px; }
</style>
</head>
<body>
<div id="SilverlightControlHost" class="silverlightHost" >
<script type="text/javascript">
createSilverlight();
</script>
</div>
</body>
</html>
Il codice soprastante rappresenta la base per tutte le
implementazioni Silverlight. Quando si sviluppano
applicazioni Silverlight in Javascript, si inserirà il
codice Javascript direttamente nella pagina HTML. Prima di
esser in grado di far qualcosa di costruttivo, avremo bisogno
di aggiungere un id allo XAML. Una volta che viene assegnato
un nome a TextBlock, questo può esser manipolato
attraverso Javascript. Poi, avremo bisogno di interagire con
XAML attraverso un evento di qualche tipo. L'evento
più comunemente usato, proprio come con ASP.NET
(l'evento Load), è l'evento
onLoad e ne viene mostrato l'uso
nell'esempio sottostante.
Es.4: TestPage.html.js
// Codice JScript
//contiene le chiamate a silverlight.js, l'esempio qui sotto carica Page.xaml
function createSilverlight() {
Silverlight.createObjectEx({
source: "Page.xaml" ,
parentElement: document.getElementById("SilverlightControlHost"),
id: "SilverlightControl" ,
properties: {
width: "100%" ,
height: "100%" ,
version: "1.1" ,
enableHtmlAccess: "true"
},
events: {onLoad:onLoad}
});
// Dà il focus al controllo Silverlight di default
document.body.onload = function() {
var silverlightControl = document.getElementById('SilverlightControl');
if (silverlightControl)
silverlightControl.focus();
}
}
Infine per completare lo scenario, abbiamo bisogno di creare un gestore dell'evento onLoad nella nostra pagina HTML. Un gestore degli eventi in Javascript per Silverlight ha bisogno di tre parametri:
- un riferimento ad un oggetto contenitore per l'invio oppure un elemento <div>;
- argomenti opzionali che non sono stati usati in questo esempio;
- un riferimento all'elemento radice del documento XAML.
Possiamo usare l'argomento che si riferisce all'elemento root con il metodo findName per trovare qualsiasi elemento che possiede un attributo con un nome ad esso assegnato nel file XAML.
Managed JScript
Microsoft ha esteso Javascript per aggiungere capacità estese al servizio delle tecnologie Microsoft e tools quali Internet Explorer. La versione Microsoft di Javascript viene chiamata JScript. Microsoft ha rilasciato una versione avanzata di JScript da usare con la versione 1.0 del .NET Framework. Tale versione avanzata viene chiamata JScript.NET. Più tardi è stata rilasciata una nuova versione di JScript per lavorare con la versione 2.0 di Silverlight ed è stata chiamata Managed JScript.
C#
La versione 3.0 di C# rappresenta anch'essa un esempio di linguaggio dinamico. L'unica differenza nello sviluppo di applicazioni Silverlight rispetto a Javascript è che il file XAML identifica un codice dentro il file attraverso l'attributo x:Class come mostrato qui sotto.
Es.5: Page.xaml
<Canvas x:Name="parentCanvas"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="Page_Loaded"
x:Class="SLExampleCS.Page;assembly=ClientBin/SLExampleCS.dll"
Width="640"
Height="480"
Background="White">
<TextBlock x:Name="myText" FontFamily="Segoe UI"
FontSize="12" Text="Questo è un esempio" />
</Canvas>
Inoltre, la gestione degli eventi non sarà più legata nel panorama di Silverlight attraverso il file XAML visto in precedenza. Nell'esempio soprastante, l'evento Loaded viene legato al gestore Page_Loaded nel codice all'interno del file. Il codice associato al file viene mostrato qui sotto.
Es.6: Page.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SLExampleCS {
public partial class Page : Canvas {
public void Page_Loaded(object o, EventArgs e) {
// Richiesto per inizializzare le variabili
InitializeComponent();
myText.FontSize = 40;
}
}
}
Le sezioni qui sotto illustrano semplicemente le differenze sintattiche poiché le applicazioni vengono gestite nella stessa identica maniera appena illustrata.
Visual Basic
La versione Visual Basic dell'esempio visto prima viene mostrata qui sotto.
Es. 7: Page.xaml.vb
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SLExampleCS {
public partial class Page : Canvas {
public void Page_Loaded(object o, EventArgs e) {
// Richiesto per inizializzare le variabili
InitializeComponent();
myText.FontSize = 40;
}
}
}
VBx
Visual Basic è alla versione 9.0 ma questa versione non ricopre interamente tutti i requisiti per essere un linguaggio di programmazione dinamico. Ad ogni modo, la versione 10.0 è in fase di sviluppo ed è stata battezzata VBx. VBx sarà una versione dinamica di Visual Basic che lo renderà maggiormente utilizzabile per la creazione di applicazioni Silverlight.
IronPython e IronRuby
IronPython è la versione dinamica di Python appositamente sviluppata per Silverlight 2.0 mentre IronRuby è un altro linguaggio di programmazione dinamico disegnato per l'utilizzo in Silverlight 2.0 e rappresenta una modifica del linguaggio Ruby.
- Articolo precedente Programmi e tool per sviluppare con Silverlight: gli ambienti di sviluppo
- Articolo successivo Creare un programma in Silverlight