yeah done by Peter. send yours to nop and be a popstar, comme qui dirait.
Ce site n'est pas un site sur le cyclimse.
Merci de votre compréhension.
vendredi 09 mai 2008
mercredi 12 septembre 2007
17:51  » Silverlight 1.0 Mini FAQ - programmation, silverlight
Chose promise, chose dûe.


Comment obtenir une référence Javascript sur un élément graphique ?

Il faut utiliser la méthode findName. Elle prend en paramètre le nom de l'élément qu'on souhaite récupérer : ce nom correspond à ce qui a été défini dans les attributs x:Name du code xaml. On peut appeler cette méthode depuis la propriété content de l'objet représentant le contrôle Silverlight, mais elle est disponible sur n'importe quel contrôle, et l'élément dont le nom est passé en paramètre est recherché dans l'intégralité de l'arbre des contrôles et pas uniquement dans les descendants de l'élément à partir duquel l'appel est réalisé, on peut donc y aller comme des foufous et l'appeler de n'importe où :)


Comment changer la valeur des propriétés des éléments graphiques ?

Dans la plupart des cas, on le fait de manière classique :
 
monElementGraphique.Propriete = valeur;
 


Les attached properties doivent cependant être traitées différemment. Par exemple, pour changer la valeur de la propriété Canvas.Top, on écrira :
 
monElementGraphique.["Canvas.Top"] = valeur;
 



Comment télécharger du contenu ?

Grâce à l'objet downloader. On en crée une instance en appelant la méthode createObject de l'objet correspondant au contrôle Silverlight. L'objet que nous obtenons permet de télécharger un contenu depuis une url. Le contenu doit être dans le même domaine que l'application Silverlight : l'objet downloader est basé sur l'objet XMLHttpRequest et hérite donc de l'impossiblité de faire des requêtes cross-domain.
 
var objetDownloader = controleSilverLight.createObject("downloader");
 

Avant de faire récupérer des choses à l'objet, nous devons ajouter un handler pour son évènement completed, qui annonce la fin du téléchargement. En effet, le downloader effectue ses tranferts de manière asynchrone, nous devons donc forcément gérer l'évènement completed si on souhaite récupérer les données téléchargées.
 
var tokenDownloader = objetDownloader.addEventListener("completed", Silverlight.createDelegate(this, this.HandleDownloadCompleted));
 

On indique ensuite à l'objet quoi télécharger, par le biais de la méthode open, qui prend en premier paramètre la méthode http à utiliser (ex : "GET"), et en second l'adresse de la ressource à récupérer.
 
objetDownloader.open("GET", "/UneSuperImage.png");
 

Enfin, on lance le transfert grâce en appelant la méthode send.
 
objetDownloader.send();
 

Le téléchargement étant à présent lancé, voyons comment récupérer les données dans le gestionnaire de l'évènement completed. Ce dernier accepte deux paramètres : sender, qui est une référence sur l'objet qui a signalé cet évènement (i.e notre objet downloader), et eventArgs, qui représente les paramètres associés à l'évènement. Pour récupérer les données, nous pouvons appeler la méthode getResponseText() de l'objet downloader. Cette méthode prend un argument qui permet d'indiquer, dans le cas où on a téléchargé un fichier zip, quel fichier de l'archive on souhaite récupérer. S'il ne s'agit pas d'un fichier zip, il suffit de passer une chaine de caractères vide en paramètre, ou d'utiliser directement la propriété ResponseText.
 
HandleDownloadCompleted: function(sender, eventArgs)
{
  // ces deux lignes ont le même effet
  var data = sender.getResponseText("");
  data = sender.ResponseText;
 
  // pour ne pas dégrader les performances  
  sender.removeEventListener("completed", tokenDownloader);
  sender = null;
}
 

Comme vous pouvez le voir dans le code ci-dessus, une fois les données récupérées je supprime le handler de l'évènement completed puis je mets la référence au downloader à null, ce qui d'après une page de la MSDN permet d'améliorer les performances des applications Silverlight.
Notez que la méthode removeEventListener() réclame un token en paramètre : ce token est renvoyé par la méthode addEventListener.


J'ai écrit le code d'un joli bouton en xaml. Comment l'afficher ?

Je pars du principe que le code xaml dont on parle ne fait pas partie du fichier xaml qu'on indique comme source au contrôle Silverlight (sinon il serait déjà affiché :) ).
Premièrement, si ce n'est pas déjà fait, il faut télécharger le contenu du fichier xaml (voir Comment télécharger du contenu ?).
Ensuite, une fois qu'on a récupéré la chaine de caractères correspondant au contenu du fichier xaml, il faut transformer cette chaine en objets Javascript.
Cela se fait à l'aide de la méthode CreateFromXaml() de la propriété content de l'objet représentant le contrôle Silverlight. Il prend en premier paramètre le code xaml à partir duquel créer les contrôles, et en second un booléen optionnel (false par défaut) qui indique, s'il est à true, que la méthode doit modifier les éventuels noms des contrôles (i.e le contenu de l'attribut x:Name) afin d'éviter les collisions.
 
// on suppose que la variable "xaml" contient le code xaml à afficher
var controle = controlSilverLight.content.CreateFromXaml(xaml, true);
 

Nous obtenons donc notre/nos contrôle(s), que nous devons à présent ajouter à l'arbre des contrôles pour qu'ils soient affichés. Pour cela, il suffit d'avoir une référence à un élément de type Canvas, qui fait office de contrôle conteneur en Silverlight. Sa propriété children correspond à l'ensemble des contrôles qu'il contient, et nous y ajoutons les contrôles que nous venons d'obtenir grâce à sa méthode add.
 
// on suppose que la variable "root" contient une référence vers un objet Canvas
root.children.add(controle);
 



Comment cacher un élément ?

Mettez sa propriété Visibility à... Collapsed :) (hé non, pas Hidden)
Les deux valeurs possibles de cette propriété sont Visible et Collapsed.
 
this.MainCanvas.Visibility = "Collapsed";
 



Comment être notifié lorsque l'image affichée par un contrôle Image a terminé son chargement ?

Si ça n'a pas grand intérêt pour les images en local (le temps de chargement est proche de zéro), ça devient intéressant lorsqu'on va chercher les images à la demande.
Pour cela, il suffit d'ajouter un handler à l'évènement DownloadProgressChanged. Dans le handler, vous pouvez consulter la valeur de sender.DownloadProgress pour savoir où en est le téléchargement. La valeur varie entre 0 et 1 (1 indique que le téléchargement est terminé).
 
this.Image.addEventListener("DownloadProgressChanged", Silverlight.createDelegate(this, this.ImageLoading));
this.Image["Source"] = "http://www.mondomaine.com/monImage.png";
 
// handler de l'évènement DownloadProgressChanged
ImageLoading: function(sender, eventArgs)
{
	if(sender.DownloadProgress == 1) // on vérifie que le téléchargement est terminé
    {
		// ...
    }
}
 



Comment contrôler une animation depuis le code Javascript ?

Supposons que votre xaml contienne un Storyboard portant le doux nom de "pouet". Il faudra d'abord obtenir une référence dessus (grâce à findName), et vous pourrez ensuite utiliser les méthodes Begin, Pause, Resume, Seek et Stop pour contrôler l'animation.

 
// Obtenir une référence sur l'animation "pouet"
var animation = this.target.findName("pouet");
// Démarrer l'animation "pouet"
animation.begin();
 



Comment être notifié lorsqu'une animation est terminée ?

Il suffit de gérer l'évènement Completed de l'animation :
 
// Obtenir une référence sur l'animation "pouet"
var animation = this.target.findName("pouet");
// Démarrer l'animation "pouet"
animation.addEventListener("Completed", Silverlight.createDelegate(this, this.HandleAnimationCompleted));
 



Comment récupérer la taille totale de l'application Silverlight en pixels ?

La taille en pixels de l'application est contenu dans les propriétés actualWidth et actualHeight de la propriété content de l'objet Silverlight :
 
var largeur = controleSilverLight.content.actualWidth;
var hauteur = controleSilverLight.content.actualHeight;
 

mercredi 12 septembre 2007 - 19:00

du bon boulot ;)
Je compte pas spécialement tester cette ... technologie ... par contre ;)
niko
(http://www.blue-pen.net)
Réagir :

Texte: *
Nom: *
Site web:
Email: (pour être tenu au courant des autres réponses à ce post - ne sera pas affiché - gravatar)
Mot à la con: * (si vous ne le connaissez pas, voir cette page)
RisoliVillard: (mais qu'est-ce que c'est ? - télécharger)
Si un autre perdu comme moi poste ici, me prévenir:
Enregistrer tout ça dans un gâteau pendant un an: (ou mettre à jour le gâteau)
* : champs obligatoires
 


Le html n'est pas autorisé, pour mettre en forme vos textes, utilisez les codes suivants:
* [b]gras[/b]
* [u]souligné[/u]
* [i]italique[/i]
* [s]barré[/s]
* [sup]exposant[/sup]
* [url=http://www.monlien.com]texte du lien[/url] (pour les feignants, sachez que tout texte de la forme http://quelquechose sera automatiquement transformé en lien)
* [img]http://www.monlien.com/monimage.jpg[/img]
* [center]texte centré[/center]
* [quote]citation[/quote]
* Toute ligne commençant par "/me" sera remplacée à la sauce IRC. Si votre pseudo est Martine et que vous inscrivez :
  /me va à la plage
Le résultat sera :
  * Martine va à la plage
* [mp3]http://www.monlien.com/mamusique.mp3[/mp3]
* [code language="C#|php|vb.net|etc..."]public void DuCode() { }[/code]
back!