octobre
2008
[Désolé pour la mise en page, je dois faire vite pour pouvoir rapporter le plus d’informations possibles]
pour cette première journée, j’ai décidé de suivre la conférence données par Charles Petzold, grand développeur et auteur de de dizaines de libres dont le livre de référence sur WPF (http://www.charlespetzold.com/wpf/index.html)
Charles Petzold, n’est pas jeune. A moitié chauve, il a une bonne tête mais n’a pas une tête de geek et l’air rigolo même si malgré mon niveau d’anglais, je ne comprend pas toutes les blagues auxquelles les gens rigolent
Il est aussi du genre à parler la bouche pleine pendant qu’il mange des cacahuètes. Chose suffisamment surprenante pour être précisée
Je joins aussi la vidéo que j’ai pu filmer où d’un coup, M Petzold a demandé à toute la salle de faire de la gymnastique. Je vous laisse admirer la vidéo très courte: http://www.youtube.com/v/m00PktDG_O0
Résumé:
Cette session, non pas orientée sur le futur de WPF, était plutôt orientée sur l’étude de l’implémentation de WPF auprès des développurs et quelle utilisation, il en est fait. C’est surtout, dans sa première partie, une introduction à WPF. Utilisateurs avertis, passez votre chemin sur la première partie!
note: Cette session dure toute la journée, je mettrai donc à jour ce billet au fur et à mesure.
Passons au contenu:
(Interprétation de ses dires)
Partie I
WPF est arrivé avec le framework 3.0 alors que Winforms et même MFC étaient encore très présents. Depuis trois ans, de plus en plus de programmeurs ont utilisé WPF et de plus en plus de programmeurs l’ont aimé. Vous pouvez écrire une application soit en full .Net (C#, VB.Net, etc) ou alors en XAML.
Celui lui, XAML est là pour remplacer ce qui n’a jamais marché comme il faut: à savoir le code auto généré de visual studio pour les applications WinForms. XAML qui est full-compliant avec XML est là pour corriger tout cela en étant totalement contrôlable.
XAML supporte beaucoup de contrôles courants nécessaires pour la plupart des formulaires mais surtout là où XAML sort du lot c’est dans la gestion des animations. Il permet ainsi de séparer proprement la partie design et la partie code, permettant d’avoir des équipes de développeurs travaillant sans se préoccuper de l’ergonomie finale de leur applications.
Selon M Petzold, les développeurs préfèrent écrire leur XAML eux-mêmes plutôt qu’utiliser les générateurs de code!!
Il a ensuite montré différents exemples WPF montrant comment WPF permettait de faire des animations impressionnantes tournants à même le navigateur Internet. Il a ainsi expliqué que, alors que les objectifs de WPF étaient de permettre au développeur de se moquer de cette partie et de se focaliser sur le code fonctionnel, les développeurs ont plutot chercher à comprendre le fonctionnement en interne de ce dernier.
Exemple de code simple
<Page xmlms="http://blabla" <br />
Background="Pink" <br />
Content="Hello world"; <br />
FontSize="72pt" <br />
/> <br />
Avec ce simple exemple, Charles nous montre la structure déclarative du code et nous explique que plusieurs propriétés ont un convertisseur au moment de la compilation, comme FontSize, où il est possible de mettre 72pt, tout comme 2,54cm. en WPF, la dimension ne se fait pas en pixels mais en inch. Néanmoins, vous pouvez choisir le format de votre choix, celui avec lequel vous être les plus confortables.
De la même façon pour une couleur, vous pouvez mettre une couleur connue (Color.Brush) ou une couleur hexadecimal, y compris une couleurs gérant le channel alpha (Transparence). WPF se capable d’analyser le texte de la propriété pour deviner ce que vous souhaitez afficher.
<Page.FontSize> <br />
96 <br />
</Page.FontSize> <br />
Property Element Syntax, permettant d’écrire les propriétés en tant que noeud enfants plutot qu’attributs. Pour des choses simples, ce n’est pas très intéressant mais quand on crée des propriétés plus avancées comme suit, cela change tout
<SolidColorBrush> <br />
<SolidColorBrush.Color> <br />
// propriétés <br />
</SolidColorBruch.Color> <br />
</SolidColorBrush> <br />
</Page.Background>
Cela a le grand avantage (et vous serez forcément obligé de l’utiliser à un moment où un autre) de décrire des propriétés que vous ne pourriez décrire et configurer avec une simple et unique chaine de caractères.
Prenons l’exemple d’un gradient
<LinearGradient StartPoin="0 0" EndPoint="0 0"> <br />
<LinearGradientBrush.GradientStops> <br />
<GradientStop offset="0.00" Color="Red" /> <br />
<GradientStop offset="0.00" Color="Blue" /> <br />
<GradientStop offset="0.00" Color="Red" /> <br />
</LinearGradientBrush.GradientStops> <br />
</LinearGradient> <br />
</PageBackground>
Les composants:
Le composant le plus simple est sûrement le TextBlock
FontSize="10pt" />
Comme les CSS, il y a un ordre d’application des propriétés
(du plus important au moins important)
Propriétés locales
Héritage
Valeurs par défaut
Ceci explique d’un textblock prenne toute la largeur et hauteur par défaut car son alignement est configuré sur « Strech » par défaut qui correspond à la propriété Dock des Windows Forms (à peu de choses près)
Il a ensuite montré que certains propriétés peuvent être mises en attribut ou alors en tant que noeud enfant. Par exemple
Hello World <br />
</TextBlock>
et ces propriétés peuvent mettre être composés de plusieurs noeuds enfants
Hello <italic>World</italic> <br />
</TextBlock> <br />
Héritage:
Nous avons vu plus haut qu’il y avait une notion d’héritage de propriétés avec WPF
Exemple:
<TextBlock>Hello World</TextBlock> <br />
</Border>
Ainsi, ceux qui sont adeptes des CSS en Web, ils ne seront pas perdus.
Nous avons ainsi un arbre de composants parents et enfants, tel un arbre généalogique et qui héritent les uns des autres.
Nous avons néanmoins des exceptions:
<TextBlock.ToolTip> <br />
<TextBlock>Mon Tooltip</TextBlock> <br />
</TextBlock.ToolTip> <br />
</TextBlock>
Ici, le tooltip est composé d’un TextBlock mais qui se affiché à un autre « niveau », comme un popup. Il ne fait pas partie du même arbre.
Transformations:
Le speaker a ensuite parlé des transformations, une grande force de WPF. Il nous a, à l’aide de simples photos, montré les avantages et les variations des transformations. Ainsi, il a pris comme exemple, la transformation Stretch (Déformation) et ses propriétés fort utiles comme UpOnly qui indique que l’image sera agrandie en même temps que l’application (mode maximisé par exemple) mais que jamais, elle ne pourrait être réduite plus que sa taille de départ.
L’inverse est DownOnly.
Nous sommes ensuite passés aux « astuces » de WPF.
A l’aid des objets partagés (Shared Objects), M Petzold a montré comment la réutilisation d’objets, placés en tant que ressources, au sein même du document XML, permettent de contrôler l’affichage ou le comportement de plusieurs contrôles dans toute l’application, exactement comme vous le feriez avec une feuille de style.
ex:
<LinearGradientBrush x:key="myBrush" > <br />
//ce que vous voulez <br />
</LinearGradientBrush> <br />
</Page.Resources> <br />
<Button> <br />
<Button.ForeGround> <br />
<StaticResource resourceKey="myBrush"/> <br />
</Button.ForeGround> <br />
</Button> <br />
ce qui peut s’écrire de façon simplifiée de la façon suivante:
<Button Foreground="{StaticResource myBrush}" />
Charles a ensuite mis le doigt sur le fait que l’on puisse accéder et appeler des resources que l’on pas déclaré. On appelle cela les ressources locales (du système)
exemples:
{x:static SystemColors.ActionCaption} qui représente la couleur de caption du thème Windows actuel
{x:static sys:Math.Pi} qui réprésente le nombre PI
{x:static sys:DateTime.Now} qui répresente la date courante, permettant de l’afficher sans code behind
Suite à venir…
Conclusion: Charles Petzold explique très bien. La session était clairement orientée pour ceux qui ne connaissaient pas ou peu WPF et était sûrement du réchauffé pour ceux qui s’y connaissaient déjà, néanmoins M Petzold a le don de trouver des exemples simples, variés et mettant bien en valeur le point qu’il cherche à montrer. Session de qualité! Espérant que les suivantes soient du même niveau.