Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[PDC] J0: Pré-conférence “WPF Code & Concepts” par Charles Petzold

La PDC (Professionnal Developer Conference) a commencé aujourd’hui pour moi, qui ait l’occasion de participer aux pré-conférences Smile

Pour ma part j’ai assisté à la session intitulée '”WPF: Code & Concepts” qui était animée par Charles Petzold en personne. Non pas que je ne connaisse pas le sujet mais je me suis dit qu’un speaker comme lui, ce n’est pas tous les jours qu’on a l’occasion de le voir sur scène Wink

La session a duré 6 heures, ce qui est relativement énorme. Au programme, pas de slides mais uniquement du code (XAML et C#) et tout un discours qu’il se contentera de lire pour faire sa présentation. Je dois avouer que j’ai était assez dérouté par le fait de le voir lire son texte de A à Z mais, avec les pointes d’humour qui vont bien, on s’y fait Smile

Après une présentation du speaker et des différents ouvrages qu’il a déjà écrit, il a commencé par présenter les différentes plateformes de développement d’interfaces graphiques tels que MFC, WindowsForms puis WPF.

Puis, il a enchainé en expliquant que les applications WPF pouvaient-être développées avec un langage .NET (C#, VB) ou simplement en XAML. A partir de là, nous avons eu droit à une très grande présentation du XAML:

  • Objectifs, origine
  • Une application WPF peut-être composée de XAML et de code .NET ou juste de XAML (à ce moment, on parle de “Loose XAML”)
  • Possibilité de charger un fichier XAML grâce à la méthode XamlReader.Load. Pour mettre en pratique cette partie, il nous a montré son outil, XAMLCruncher (sorte de XAMLPad amélioré) qu’il a retravaillé pour qu’il puisse, maintenant, lui indiquer des fichiers de scripts à utiliser afin de faciliter les démonstrations.

Ensuite est venu le moment où il a expliqué que le système d’affichage de WPF n’était pas basé sur des pixels mais sur les DPI (Dot Per Inch, 1 DPI = 2,54 cm), qui permettent d’avoir le même affichage, quelque soit la résolution de l’écran.

Faisant pas mal de démonstrations, il a ensuite expliqué que plusieurs syntaxe étaient disponible pour écrire les valeurs des propriétés. L’une d’entre elle, appelée “Property Element Syntax” permet d’indiquer la valeur des propriétés en tant que noeud enfant, dans le XAML, plutôt que de passer par des attributs:

<Page>
    <Page.FontSize>
        96
    </Page.FontSize>
</Page>

Cette syntaxe n’est pas très utile, sauf lorsque l’on souhaite travailler avec des propriétés qui sont des collections, comme le LinearGradientBrush et sa propriété GradientStops. Il a profité de cette partie pour mettre en avant que les propriétés sont définies suivant une logique précise: valeur par défaut => héritée depuis un contrôle parent => valeur assignée par l’utilisateur.

Ensuite, nous avons eu droit à la démonstration de certains contrôles (et de leurs propriétés) de WPF:

  • TextBlock et ses propriétés FontSize, FontFamily, Padding, Merging, etc.
  • Image et ses propriétés Stretch et StretchDirection, dont la dernière permet d’indiquer que l’élément ne peut que se réduire (DownOnly) ou s’agrandir (UpOnly) pour se stretcher.
  • Les différents contrôles de positionnement: StackPanel/Wrapanel/DockPanel/Grid/Canvas
  • Le ScrollViewer et le ViewBox

Il a profiter, lors de son discours sur le DockPanel, pour aborder la notion de propriété attachée (Attached Property) qui ne sont rien d’autre que des propriétés définies sur une classe mais assignées sur des contrôles différents. En WinForms, tous les contrôles avaient connaissance des propriétés de positionnement ce qui entrainant une surconsommation de la mémoire. Avec WPF, seuls les contrôles devant-être positionné/sur lesquels on a appliqué les propriétés en sont conscient.

Il a ensuite continué en parlant des ressources WPF et en expliquant différents points:

  • l’identifiant (x:Key) est obligatoire
  • un contrôle héritent toujours des ressources de ces contrôles parent (dans l’arbre visuel)
  • il est nécessaire d’utiliser les extensions du langage StaticResource et DynamicResource

Après la pause déjeuner, nous avons eu droit à la création d’une simple application de démonstration (un solveur d’équations mathématique):

  • Présentation des fichiers présents par défaut dans la solution
  • Mise ne place de l’IHM (et explication du code XAML)
  • Mise en place de la méthode de calcul
  • Définition d’un gestionnaire d’évènements sur chacun des évènements TextChanged des TextBox (si l’'utilisateur saisit des double alors le bouton est activé. Dans le cas contraire, le bouton est désactivé)
  • Refactoring du code précédent pour utiliser les évènements attachés (Attached Events) => TextBox.TextChanged au niveau de la fenêtre principale
  • Création d’un contrôle NumericTextBox, héritant de TextBox.
  • La surcharge des évènements ne fonctionne que si le contrôle a le focus. Dans le cas contraire, il est nécessaire de surcharger les méthodes PreviewXXX (où XXX = nom de la méthode précédente)

Nous avons ensuite eu droit à la msie en place de la même application, mais en version XBAP. Nous avons continuez avec une présentation (et des démonstrations) du DataBinding:

  • Binding XAML sur des éléments de l’IHM
  • Présentation des différents modes de binding: OneWay, TwoWay, etc.
  • Présentation des différents modes de mise à jour du binding (UpdateSourceTrigger)
  • Présentation des convertisseurs et de comment créer le sien (implémentation de l’interface IValueConverter)

Nous avons ensuite eu droit à une présentation des styles WPF:

  • Utilisation de setter pour définir la prop à modifier
  • Possibilité de définir le type sur lequel le style doit-être appliqué (propriété TargetType). Attention: si un style est définit sur un contrôle mais que celui-ci redéfinisse les propriétés, ce sont ces valeurs qui seront utilisées, pas celle du style.
  • Possibilité de définir des Triggers
  • Possibilité de faire de l’héritage de style, au moyen de l’attribut BasedOn

Nous avons, après cela, eu droit à une présentation des animations et du fait qu’il est possible de les utiliser dans les triggers des styles ainsi que ceux liés aux évènements. Charles s’est également attardé quelques minutes sur les propriétés FillBehavior et SpeedRatio. Dans sa démonstration des animations, nous avons eu droit à l’utilisation d’un objet de type MediaElement, pour lire une vidéo, accompagné d’un trigger et d’une animation permettant de faire défiler une image en fonction du rythme de la musique !

Puis, nous avons avons (re)découvert les Dependency Properties, qui sont les seules propriétés que le moteur WPF est capable d’animer, transformer, binder, etc…

 

D’une manière générale, le niveau de la session était très faible: il s’agissant clairement d’une session de découverte de WPF. Cependant, la pédagogie employée par le speaker, Charles Petzold, fait qu’il s’agit d’une session vraiment très intéressante à regarder, même si l’on connait déjà le sujet !

 

A demain pour le début des premières conférences !

 

A+

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: lundi 27 octobre 2008 07:05 par Thomas LEBRUN
Classé sous : , , ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01