Developpez.com

Une très vaste base de connaissances en informatique avec
plus de 100 FAQ et 10 000 réponses à vos questions

FAQ SilverlightConsultez toutes les FAQ

Nombre d'auteurs : 7, nombre de questions : 69, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireDéveloppementSilverlight 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 :

 
Sélectionnez

<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 :

 
Sélectionnez

<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 :

 
Sélectionnez

private bool visible_;
public Page()
{
    InitializeComponent();
    visible_ = true;
}
 
private void Button_Click(object sender, RoutedEventArgs e)
{
    visible_ = !visible_;
    HtmlPage.Window.Invoke("setDisplayDiv", "demo", visible_);
}
Créé le 19 juin 2008  par nico-pyright(c)

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.

 
Sélectionnez

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 :

 
Sélectionnez

<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.

 
Sélectionnez

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.

Créé le 19 juin 2008  par nico-pyright(c)
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2010 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.