#45 - Comunicazione tra oggetti Silverlight nella stessa pagina
di Alessio Leoncini, in Silverlight 2.0, 23 aprile 2009
In Silverlight 2.0 è possibile mettere in comunicazione più oggetti della pagina appoggiandosi a specifiche funzioni Javascript definite nell'HTML.
La prima attività è definire nell'oggetto Silverlight che "riceve" la comunicazione un metodo che possa essere chiamato da una funzione Javascript:
public partial class Page3 : UserControl { public Page3() { InitializeComponent(); HtmlPage.RegisterScriptableObject("SLObject1", this); } [ScriptableMember] public void SetTextBlock1Text(string txt) { TextBlock1.Text = txt; } }
<script type="text/javascript"> function SetTextBlock1Text(txt) { var silverlightControlHost1 = document.getElementById("silverlightControlHost1"); silverlightControlHost1.Content.SLObject1.SetTextBlock1Text(txt); } </script> </head> <body> <div id="div1"> <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300" id="silverlightControlHost1"> <param name="source" value="ClientBin/SilverlightApplication1.xap" /> <param name="background" value="green" /> </object> </div> <div id="div2"> <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300"> <param name="source" value="ClientBin/SilverlightApplication2.xap" /> <param name="background" value="red" /> </object> </div> </body> </html>
Successivamente si predispone l'oggetto Silverlight "chiamante" ad invocare tale funzione SetTextBlock1Text attraverso il metodo Invoke della classe HtmlPage.Window:
private void Button_Click(object sender, RoutedEventArgs e) { Button button = sender as Button; string txt = String.Format("{0} è stato cliccato", button.Content); HtmlPage.Window.Invoke("SetTextBlock1Text", new string[] { txt }); }
Lo snippet è molto semplice: alla pressione di un Button viene passato come parametro alla funzione un testo corrispondente al nome dell'oggetto premuto, la funzione Javascript recupera l'istanza dell'oggetto a cui inviare l'informazione e la passa come parametro della specifica funzione "managed", precedentemente predisposta attraverso l'attributo [ScriptableMember].
Prendendo spunto da questo esempio è possibile costruire un piccolo modello di comunicazione maggiormente flessibile che possa estendersi anche a più oggetti contemporaneamente.
Approfondimenti
-
Supporto audio e video in Silverlight 3.0
-
Moonlight 2.0 Preview: Silverlight per Linux
-
#43 - Drag-and-drop in Silverlight 2.0
-
#60 - Immagini dinamiche con Deep Zoom e Silverlight
-
Realizzare un sito completo in Silverlight: una galleria fotografica
-
#46 - Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
-
#52 - Evitare la cache dei file XAP in Silverlight 2.0
-
Applicazioni Silverlight con il cloud computing su Windows Azure
-
Mostrare la WebCam in Silverlight
-
gestire la sicurezza in #silverlight: un caso pratico http://u.aspitalia.com/4
-
Ecco l'indice definitivo di "Silverlight 3.0 - Guida Completa"

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.