La Syntaxe de XAML
Basée sur XML, elle definit un ensemble de balises et d'attributs représentants des objets d'interface et leurs présentation.
La syntaxe XML
XAML est un langage à balise dérivé de XML. Les composants graphiques sont définis par des balises ouvertes ou fermées, dotées d'attributs.
Exemple de balise avec contenu:
<TextBlock> Un texte </TextBlock>
et sans contenu:
<TextBlock />
Les attributs sont comme des variables, assignés par une valeur. En
XML ces valeurs sont mises entre guillemets, contrairement au contenu qui
est soit un texte, soit une ou plusieurs autres balises.
Par exemple nous donnons le nom t1 avec l'attribut Name:
<TextBlock Name="t1" /> <TextBlock Name="t1"> Un texte </TextBlock>
On verra que les balises peuvent contenir d'autres balises, et même que les attributs peuvent devenir des balises ou inversement, par exemple:
<TextBlock Text="Un texte" />
La syntaxe des propriétés
Une propriétés d'un objet, entendons par là ce qui le caractérise, peut s'écrire sous forme d'attribut. Par exemple la propriété de couleur de fond d'un rectangle s'écrit avec l'attribut Fill:
<Rectangle Fill="Red" />
Afin de décrire des propriétés complexes, XAML dispose
d'un format alternative appelée "Property element syntax"
(syntaxe d'élément propriété), qui étend
la syntaxe de XML et donne au point une signification nouvelle.
En XML, la valeur d'un attribut doit être une chaîne de caractères.
En XAML, ce peut être un autre objet du langage.
Mais on n'assigne pas directement l'objet à l'attribut avec le signe
égal, on l'associe avec un point selon la syntaxe propre à XAML
qui a la forme:
nomElement.nomPropriété
Reprenons l'exemple de l'objet Rectangle et la propriété Fill qui est la couleur de remplissage, l'attribut se transforme en balises:
<Rectangle> <Rectangle.Fill> </Rectangle.Fill> </Button>
Ce qui permet d'ajouter des balises et attributs à la propriété Fill, comme par exemple une texture faite avec une photo, ce que l'on verra plus tard dans ce manuel.
Un autre exemple est fourni par la spécification du langage, celui du bouton auquel on associe une liste déroulante:
<Button> <Button.ContextMenu> <ContextMenu> <MenuItem> Ouvrir </MenuItem> <MenuItem> Fermer </MenuItem> </ContextMenu> </Button.ContextMenu> </Button>
On voit que ContextMenu, qui est une liste de menu, devient propriété de bouton grâce à "Button.ContextMenu", et se déclare à l'intérieur de la description du bouton.
Le contenu d'une balise peut être vu comme une propriété. Ainsi le texte du bouton est une propriété qui s'écrit en contenu ou comme valeur de l'attribut Text ou Content selon l'objet:
<TextBlock Text="Un texte" />
Les espaces de noms
Les espaces de noms sont spécificiés comme attributs du conteneur
le plus global du fichier XAML, Canvas ou Window, ou Page. Ce sont des URL
prédéfinies qui seront données dans les exemples et qui
correspondent au type de définition XAML.
Exemple:
<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
Pour les espaces de noms autres que l'espace par défaut (la première ligne), le préfixe (comme x ci-dessus) doit précéder chaque élément de cet espace de nom. En l'occurence on mettra:
x:nomElement
pour chaque élément de l'espace de nom x.
Les propriétés attachées
C'est un concept propre à XAML. La syntaxe est la même que pour les élements de propriété vus plus haut, on relie un nom de propriété à un nom de type (plutôt qu'à un nom d'élement tel que Button).
nomType.nomPropriété
Le but est d'ajouter des propriétés à un type. Les éléments de ce type pourront alors avoir les propriétés ainsi définies.
Evènements attachés
En XAML, on peut définir un évènement par un type, tandis que les gestionnaires d'évènements seront attachés aux objets représentés par des balises (telles que Button). La syntaxe est toujours la même:
nomType.nomEvènement
Etendre le langage
Il est possible d'étendre le langage XAML grâce à une
syntaxe particulière: on place entre { } l'extension, constituée
du nom d'une classe suivi de l'instance.
Exemple pris dans la spécification du langage:
<TextBlock Style="{StaticResource MonStyle}"> Un texte </TextBlock>
La classe StaticResource contient les définitions ajoutées, et l'instance MonStyle devient une propriété de bouton. On pourra utiliser Button.MonStyle dans la définition du bouton et profiter des nouvelles possibilités implémentées dans la classe.
Caractéristiques et balises racines: Canvas, Page, Application.
Sensibilité à la casse
XAML est sensible à la casse. Les majuscules en initiales des mots
doivent être préservées.
Cela ne s'applique pas forcément aux valeurs des attributs, ainsi
true et True sont admissibles, si le parseur les reconnait.
Espaces blancs
Les espaces superflus sont ignorés, ainsi que les caractères spéciaux comme le code de tabulation, équivalents à un espace.
Balise racine
Comme tout document XML, une définition XAML doit être englobée
dans une balise unique, dite élément racine.
Pour une page WPF, le conteneur est la balise Page ou Window.
Pour Silverlight, c'est Canvas.
Pour une application, c'est Application.
Plus d'informations