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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.