FAQ Silverlight
FAQ SilverlightConsultez toutes les FAQ
Nombre d'auteurs : 7, nombre de questions : 69, dernière mise à jour : 16 juin 2021
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.