Barre de score ou de progression en XAML
La combinaison de code XAML et de gestion d'évènement pour créer un nouveau composant graphique.
Afficher une barre de score, comme celle de la Google Toolbar ou un indicateur
de progression de chargement, cela suppose une interaction entre le dessin
et le programme. Donc entre JavaScript et XAML.
La version la plus simple, celle de la barre verte, consisterait à
dessiner un rectangle d'une taille définie au départ, mais pour
disposer d'un widget d'usage plus général, on définira
plutôt une barre qui puisse évoluer après affichage selon
un paramètre venant de l'utilisateur.
Les étapes seront les suivantes:
- Affichage d'un rectangle de couleur.
- Entrée d'une valeur.
- Modification du rectangle selon la valeur donnée.
Dessin du rectangle
On le place dans un cadre, ce qui fait deux rectangles imbriqués.
On a vu comment combiner des composantes à l'intérieur d'un
Canvas dans le chapitre sur le bouton.
En option, on placera aussi la valeur sous forme numérique au milieu
de la barre.
<Canvas> <Canvas x:Name="Widget" > <Rectangle x:Name="border" /> <Rectangle x:Name="bar" /> <TextBlock x:Name="digit" Text="00" /> </Canvas> </Canvas>
Le script
Pour cette démo, on choisira une valeur à partir d'un formulaire et on donne cette valeur comme paramètre d'une fonction JavaScript qui change la taille de la barre. Dans l'application pratique, c'est le programme utilisateur qui déterminera la valeur fournie à la fonction JavaScript.
Initialisation de l'indicateur
On définit la taille du rectangle vert au chargement:
function barInit(sender, args) { var obj = sender.findName("bar"); // la barre verte obj["Width"] = 0; var txt = sender.findName("digit"); // le texte txt.Text = String(0); }
Pour cela, on ajoute l'évènement Loaded au Canvas global:
<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Loaded="javascript:barInit" >
Modification de l'indicateur
Un formulaire classique permet d'entre une valeur de 0 à 100. Cette valeur est interpolée à la taille maximale de la barre, qui est de 296 pixels dans l'exemple:
var value = document.enter.user.value; value = value * 296 / 100;
Noter que l'on ne dispose plus d'un "sender" puisque l'on accède au widget de l'extérieur, mais on retrouvera le widget à l'aide du DOM:
var barcontrol = document.getElementById("agControl1");
ou agControl1 est le nom du widget dans la page HTML.
Ensuite on accède aux éléments comme précédemment:
var txt = barcontrol.findName("digit"); txt.Text = String(value); value = value * 296 / 100; var bar = barcontrol.findName("bar"); bar["Width"] = value;
La démo...
Voir le code
- Le code JavaScript.
- Le code XAML.