Redazione
a- a+

Linguaggi e Controlli di Silverlight

Il plugin di Silverlight offre un ambiente di esecuzione CLRe una libreria di base del .NET Framework (BCL) ospitata nelbrowser dell'utente e utilizzata per eseguire il codice.Silverlight è una progressione di ASP.NET AJAX, cheestende le capacità di Javascript attraverso unalibreria Javascript in modo tale da rendere il codiceJavascript maggiormente orientato agli oggetti e da fiorniremaggiori funzionalità. Il motore di esecuzione diSilverlight estende ulteriormente Javascript e l'ambientedi esecuzione ospitato dal browser.

Dynamic Language Runtime (DLR)

Ci sono correntemente due versioni di Silverlight, la 1.0 ela 2.0. Nella versione 1.0 l'unico linguaggio supportatoè Javascript mentre la versione 2.0 estendel'ambiente di esecuzione e forniscel'opportunità di sviluppare applicazioniSilverlight usando linguaggi di programmazione diversificati.Inoltre la versione 2.0 non solo apre Silverlight CLRall'uso di più linguaggi ma permette anche ailinguaggi stessi di comunicare attraverso l'uso delDynamic Language Runtime (DLR).

Un linguaggio di programmazione dinamico è tale percui il linguaggio e l'esecuzione del linguaggio sonoconcepiti per estendere dinamicamente le capacitàd'esecuzione a runtime dell'applicazione. Ad esempio,un linguaggio potrebbe essere in grado di caricare, compilaree assimilare codice che viene letto a tempo d'esecuzionema non esiste a tempo di compilazione. La parte DLR diSilverlight permette di trarre vantaggio dellefunzionalità dinamiche del linguaggio.


Console DLR

Microsoft ha sviluppato la Console DLR come metodo pertestare il codice e le applicazioni Silverlight. Microsoft hasviluppato la Console DLR per Microsoft CodePlex e l'haresa liberamente disponibile agli sviluppatori per potereffettuare i propri esperimenti. La Console DLR èdisponibile per il download sul sito ufficiale diSilverlight. La versione della DLR Console resa disponibilesu CodePlex supporta la prototipizzazione XAML attraversoJScript e Python. La Console DLR viene mostrata nella figurasottostante.

DLR console
Fig 1: DLR Console


JavaScript

Come menzionato in precedenza, nella prima versione diSilverlight, Javascript era l'unic linguaggio che potevaessere utilizzato. Creare applicazioni Silverlight usandoJavascript è molto semplice ma non èun'opzione direttamente disponibile in Visual Studio. Adogni 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'esempiopiù semplice realizzabile, partendo con una paginaHTML in cui inseriamo un tag <object>,solitamente all'interno di un tag<div> come mostrato nel codice riportatoin SimpleJS.htm. Javascript supporta la maggior parte dellepotenzialità 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 ilfile Page.xaml da caricare. Il file XAML èanch'esso estremamente semplice in questo esempio e lopotete 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>

 

<a href="/img/11/iframe2_langControl.html" title="Vedi esempio">Vedi esempio</a>;

 

L'esempio visto illustra la metodologia di includereSilverlight in una pagina HTML attraverso Javascript. Ad ognimodo, includendo il file Javascript che viene distribuito daMicrosoft per l'utilizzo di Silverlight, la vostraimplementazione sarà migliore. Ad esempio,avviserà l'utente di scaricare il pluginSilverlight se quest'ultimo non fosse giàinstallato. Il codice qui sotto illustral'implementazione di Silverlight in una pagina HTMLfacendo 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>

 

<a href="/img/11/iframe3_langControl.html" title="Vedi esempio">Vedi esempio</a>;

 

Il codice soprastante rappresenta la base per tutte leimplementazioni Silverlight. Quando si sviluppanoapplicazioni Silverlight in Javascript, si inserirà ilcodice Javascript direttamente nella pagina HTML. Prima diesser in grado di far qualcosa di costruttivo, avremo bisognodi aggiungere un id allo XAML. Una volta che viene assegnatoun nome a TextBlock, questo può esser manipolatoattraverso Javascript. Poi, avremo bisogno di interagire conXAML attraverso un evento di qualche tipo. L'eventopiù comunemente usato, proprio come con ASP.NET(l'evento Load), è l'eventoonLoad e ne viene mostrato l'usonell'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 defaultdocument.body.onload = function() {  var silverlightControl = document.getElementById('SilverlightControl');  if (silverlightControl)  silverlightControl.focus();}  }

 

<a href="/img/11/iframe4_langControl.html" title="Vedi esempio">Vedi esempio</a>;

 

Infine per completare lo scenario, abbiamo bisogno di creareun gestore dell'evento onLoad nella nostra pagina HTML.Un gestore degli eventi in Javascript per Silverlight habisogno di tre parametri:

  1. un riferimento ad un oggetto contenitore per l'invio oppure un elemento <div>;
  2. argomenti opzionali che non sono stati usati in questo esempio;
  3. un riferimento all'elemento radice del documento XAML.

Possiamo usare l'argomento che si riferisceall'elemento root con il metodo findName per trovarequalsiasi elemento che possiede un attributo con un nome adesso assegnato nel file XAML.


Managed JScript

Microsoft ha esteso Javascript per aggiungere capacitàestese al servizio delle tecnologie Microsoft e tools qualiInternet Explorer. La versione Microsoft di Javascript vienechiamata JScript. Microsoft ha rilasciato una versioneavanzata di JScript da usare con la versione 1.0 del .NETFramework. Tale versione avanzata viene chiamata JScript.NET.Più tardi è stata rilasciata una nuova versionedi 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 dilinguaggio dinamico. L'unica differenza nello sviluppo diapplicazioni Silverlight rispetto a Javascript è cheil file XAML identifica un codice dentro il file attraversol'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>

 

<a href="/img/11/iframe5_langControl.html" title="Vedi esempio">Vedi esempio</a>;

 

Inoltre, la gestione degli eventi non sarà piùlegata nel panorama di Silverlight attraverso il file XAMLvisto in precedenza. Nell'esempio soprastante,l'evento Loaded viene legato al gestore Page_Loaded nelcodice all'interno del file. Il codice associato al fileviene 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;    }}}

 

<a href="/img/11/iframe6_langControl.html" title="Vedi esempio">Vedi esempio</a>;

 

Le sezioni qui sotto illustrano semplicemente le differenzesintattiche poiché le applicazioni vengono gestitenella stessa identica maniera appena illustrata.


Visual Basic

La versione Visual Basic dell'esempio visto prima vienemostrata 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;    }}}

 

<a href="/img/11/iframe6_langControl.html" title="Vedi esempio">Vedi esempio</a>;

 


VBx

Visual Basic è alla versione 9.0 ma questa versionenon ricopre interamente tutti i requisiti per essere unlinguaggio di programmazione dinamico. Ad ogni modo, laversione 10.0 è in fase di sviluppo ed è statabattezzata VBx. VBx sarà una versione dinamica diVisual Basic che lo renderà maggiormente utilizzabileper la creazione di applicazioni Silverlight.


IronPython e IronRuby

IronPython è la versione dinamica di Pythonappositamente sviluppata per Silverlight 2.0 mentre IronRubyè un altro linguaggio di programmazione dinamicodisegnato per l'utilizzo in Silverlight 2.0 e rappresentauna modifica del linguaggio Ruby.