# Windows Presentation Foundation

Windows Presentation Foundation (WPF) (nom de code Avalon) est la spécification graphique de Microsoft .NET 3.0. Il intègre le langage descriptif XAML qui permet de l'utiliser d'une manière proche d'une page HTML pour les développeurs.
WPF est pré-installé avec Vista. Il est aussi possible de l'installer sur Windows XP (à partir du Service Pack 2) et Windows Server 2003.

## Spécifications
### Le système graphique

Il est une surcouche logicielle à DirectX pour la fabrication d'interfaces utilisateurs en dehors d'applications ludiques, il remplace Windows Forms (USER et GDI) hérité de Windows 1.0 et est entièrement vectoriel, pour le dessin comme pour le texte. Cela permet d'augmenter la taille des objets en fonction de la résolution de l'écran sans effet de pixelisation, il optimise également fortement la virtualisation des applications par prise en main à distance par la réduction des informations à faire transiter sur le réseau.
L'affichage du texte se fait au moyen des procédés ClearType, TrueType ou OpenType qui améliorent le lissage des caractères. Il supporte l'affichage de nombreux formats d'images ou vidéo comme MPEG, AVI, et bien sûr WMV de Microsoft.

### Applications autonomes et applications Web

WPF ne sert pas uniquement à afficher l'interface graphique des logiciels tels que traitement de texte, jeux, etc., il fournit également un environnement d'exécution évolué pour la création d'applications web, nommé Silverlight. Les applications Web, nommées XBAP (Xaml Browser Application, voir (en) XAML Browser Applications), sont des programmes qui tournent dans Internet Explorer ou Firefox, sous Windows ou Mac OS (sous GNU/Linux la plate-forme s'appelle MoonLight). Par défaut, ces applications n'ont pas accès au système de fichiers pour la sécurité des données et du système d'exploitation, mais un "manifest" peut être installé pour témoigner de la confiance dans une application donnée. Ceci permet, par exemple, de faciliter le déploiement d'un logiciel sur un grand nombre de machines.

### La gestion des données

Il y a séparation entre les données et leur présentation, les deux aspects étant traités par WPF. WPF gère les bases de données pour les applications ou le web et fournit des modèles de présentation.

### L'interface utilisateur de Windows

WPF fournit tous les éléments d'interface graphique : "widgets", fenêtres, boutons, champs de texte, menus, listes, etc. La description de l'interface se fait en XAML bien qu'il soit toujours possible de générer des interfaces dynamiques en code managé.
WPF offre la possibilité aux différents développeurs de créer leurs propres composants, par agrégation (UserControl) ou dérivation (CustomControl) de composants existants.
L'une des particularités de WPF est de dissocier le contrôle, au sens "composant" du terme (Entrées/Sorties, Événements, etc.) de son graphisme. De fait, pour un contrôle donné, créer ou remplacer le graphisme (au sens large du terme, c'est-à-dire en incluant les animations, les sons, etc.) se fait de manière particulièrement aisée. On parle alors de "Template" de Control.
Ainsi, l'arbre XAML des composants, souvent nommé arbre "logique", est doublé d'un arbre Visuel, déterminé à l'exécution, et prend en compte les différents "Templates" des contrôles de l'arbre logique, telles que définis via le XAML ou référencés, dans le Code Behind.

### WPF et Windows XP

Les applications WPF fonctionnent sous XP à condition que le framework .NET (anciennement appelé 'WinFX') soit installé.

## Technologie utilisant WPF

WPF est une interface graphique qui se retrouve sous différentes formes :
* une application indépendante qui s'installe sur un ordinateur en utilisant un installateur comme Windows Installer (msi) ou clickOnce;
* une applet Silverlight sous forme d'un fichier XAML Browser Applications (XBAPs) qui s'exécute sur la CLR de Silverlight. La version fournie avec le Framework .NET 3.0 fonctionne dans Internet Explorer et la version 3.5 fonctionne maintenant avec Mozilla Firefox.

### .Net Micro Framework

Le .Net Micro Framework est fourni avec une interface graphique légèrement fondée sur WPF et sans support de XAML.

### Silverlight (.NET)

« SilverLight (code-name WPF/E) est le nom de code d’une solution navigateur multi-plateforme fondée sur XAML qui améliore les présentations à base de contenu riche (2D, animation, dessin vectoriel, vidéo et audio) en complément du code HTML »
La première CTP de Silverlight a été livrée le 4 décembre 2006. La version 1.0, disponible depuis le 5 septembre 2007 permet d’agir avec l’utilisateur grâce au JavaScript. Avec la version 1.1, disponible en alpha depuis le 17 mai 2007, il est possible d'intégrer directement du code C# et VB.NET compilé.
Le runtime n'excède pas 2 Mo (taille maximum fixée par Microsoft) et comprend donc un sous ensemble de XAML (ne supportant pas la 3D par exemple).
La version 2.0 (anciennement 1.1) est disponible depuis octobre 2008. C'est toujours une version beta, elle est néanmoins opérationnelle, car certains sites web l'utilisent.
La version 3.0 finale a été mise en ligne début juillet 2009 elle inclut notamment le fonctionnement "out of browser" qui permet d'installer l'application sur la machine de l'utilisateur en local
La version 4.0 gère nativement le multicast ainsi qu'un système de DRM basé sur la technologie PlayReady. Notons également le support de la webcam, du clic droit, du rendu HTML et texte riche, les impressions, et une meilleure intégration avec le système d'exploitation (glisser-déposer avec Microsoft Office par exemple).

### Mono

L'interface graphique utilisée pour le projet Mono/Moonlight utilise le Framework Cairo dû à son espace de nom "System.Drawing" et sa compatibilité avec GDI+ (libgidplus). Il a fallu 5 ans pour une implémentation du Framework .NET 2.0 avec Windows Forms. L'implémentation de WPF par Mono n'est pour l'instant (2014) pas prévue, par manque de ressources et d'intérêt.

## Outils de développement

Il existe des outils de développement pour développer des applications WPF. La plupart sont commercialisés.
* Microsoft Cider est un outil de conception graphique utilisant XAML, fourni comme Add-in avec la version CTP de Visual Studio 2005. Il n'est pas intégré dans la version RTM de Visual Studio 2005. Cider est intégré dans la suite Visual Studio à partir de la version 2008 et dans la version Express de Visual Basic.
* Microsoft Expression Design prend en charge la création de conceptions graphiques en vue d'une exportation en XAML, langage déclaratif utilisé pour décrire les éléments de l'interface utilisateur et le contenu riche des applications (tels que le format 2D, 3D, le texte, les animations, la vidéo, etc.) pour Windows Presentation Foundation (WPF).
* Microsoft Expression Blend est construit sur WPF et peut utiliser des fichiers XAML exportés à partir de Expression Design. Blend permet de gérer les objets XAML séparément ou par calques, et permet de définir les interactions avec les actions utilisateurs, les animations, les sons ...
* XAMLPad est un outil léger inclus dans .NET Framework SDK. Il permet de créer et visualiser un fichier XAML.
* Microsoft Visual Studio (Community Edition) est un ensemble d'outils de développement gratuit contrairement à Visual Studio Entreprise Edition permettant de générer des applications Web ASP.NET, des services Web XML, des applications bureautiques ainsi que des applications mobiles.