IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Développement > Silverlight 2 et le Javascript
        Comment appeler une fonction javascript depuis mon application Silverlight ?
        Comment passer des paramètres complexes à une fonction javascript depuis Silverlight ?

rechercher
precedent    sommaire    suivant


Comment appeler une fonction javascript depuis mon application Silverlight ?
auteur : nico-pyright(c)
Prenons cette fonction javascript qui change la visibilité d'un élément, elle est déclarée dans votre page ASPX comme suit :


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');
}


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_);
}

Comment passer des paramètres complexes à une fonction javascript depuis Silverlight ?
auteur : 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.

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.


rechercher
precedent    sommaire    suivant

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

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 © 2008 Ludovic LEFORT Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.