FAQ Silverlight

FAQ SilverlightConsultez toutes les FAQ
Nombre d'auteurs : 7, nombre de questions : 69, dernière mise à jour : 16 juin 2021
Sommaire→Développement→Silverlight et le Javascript
Prenons cette fonction javascript qui change la visibilité d'un élément, elle est déclarée dans votre page ASPX comme suit :
<script type="text/javascript">
function setDisplayDiv(id, visible)
{
var o;
if (document.getElementById)
o = document.getElementById(id).style;
else if (document.layers)
o = document.layers[id];
else if (document.all)
o = document.all[id].style;
if (o)
o.display = (visible ? 'block' : 'none');
}
</script>
Plus bas dans notre page, nous avons notre composant Silverlight et un div contenant du texte :
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div style="height:100px">
<asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/monApplication.xap" MinimumVersion="2.0.30523" Width="100%" Height="100%" />
</div>
<div id="demo">
Texte de démo
</div>
Grace à la méthode Invoke de l'objet HtmlPage.Window nous pourrons appeler la fonction javascript depuis Silverlight et changer ainsi la visibilité de notre div :
private bool visible_;
public Page()
{
InitializeComponent();
visible_ = true;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
visible_ = !visible_;
HtmlPage.Window.Invoke("setDisplayDiv", "demo", visible_);
}
Prenons un exemple, j'ai un objet composé de 2 strings dans mon application.
Ces deux strings représentent des entiers.
Je veux les passer à une fonction javascript qui me renverra un objet composé de 2 entiers contenant la mise au carré des valeurs contenues dans le premier objet.
Pour ce faire, on va créer nos deux objets en C# coté Silverlight en utilisant l'attribut ScriptableMember.
public class Parametres
{
[ScriptableMember]
public string val1 { get; set; }
[ScriptableMember]
public string val2 { get; set; }
}
public class Retour
{
[ScriptableMember]
public int val1 { get; set; }
[ScriptableMember]
public int val2 { get; set; }
public override string ToString()
{
return string.Format("{0},{1}", val1, val2);
}
}
Il faudra ensuite enregistrer le type de retour coté javascript, grace à HtmlPage.RegisterCreateableType :
<script type="text/javascript">
function modify(val)
{
var xaml = $get("Xaml1");
var retour = xaml.content.services.createObject("TypeRetour");
retour.val1 = parseInt(val.val1) * parseInt(val.val1);
retour.val2 = parseInt(val.val2) * parseInt(val.val2);
return retour;
}
</script>
Dans le javascript, on va créer l'objet qui va nous servir pour retourner les valeurs à Silverlight et le renseigner en conséquence.
Enfin, coté Silverlight, on appelle la fonction javascript grace à HtmlPage.Window.Invoke en lui passant l'objet de paramètres.
private void Button_Click(object sender, RoutedEventArgs e)
{
var scriptObject = HtmlPage.Window.Invoke("modify", new Parametres { val1 = "5", val2 = "7" }) as ScriptObject;
var retour = scriptObject.ManagedObject as Retour;
HtmlPage.Window.Alert(retour.ToString());
}On récupère un objet de type ScriptObject dont on pourra caster le contenu de ManagedObject en notre type de retour.



