[WPF/VSTO] Comment afficher des contrôles WPF dans une Outlook Form Region ?
En voila une question intéressante
Avant d'aller plus loin, je vais tenter d'expliquer un peu ce que sont les "Outlook Form Regions".
Introduction aux Outlook Form Regions:
Outlook 2007 propose une nouvelle fonctionnalité, les "Outlook Form Regions" pour tout ce qui est personnalisation de l'interface utilisateur d'Outlook. Vous avez en effet la possibilité de modifier, simplement, différentes fenêtres présentes dans l'interface d'Outlook (fenêtre de visualisation d'un mail, d'écriture d'un mail, de visualisation d'un contact, etc...) pour les personnaliser et y rajouter différents contrôles, comme vous le montre cette image:
Si vous voulez avoir plus d'informations sur cette nouvelle fonctionnalité, rendez-vous à cette adresse: Outlook Form Regions Overview
Le développement d'une "Outlook Form region" n'est pas compliqué: on peut même le comparer au développement d'un simple UserControl. En effet, votre Form Region se compose de différents contrôles qui seront ensuite afficher à l'endroit que vous avez indiqué.
En partant de ce constat, je me suis demandé s'il serait possible d'utiliser un peu de WPF au sein des Outlook Form Regions. Et bien la réponse est: Oui (et cela marche vraiment bien).
Là encore, la technique est simple et si vous avez déjà fait un peu d'interop WPF/WindowsForms, vous ne devriez pas être trop perdu 
Comment cela fonctionne-t-il ?
Dans votre solution Visual Studio, commencez par créer un nouveau projet qui hébergera votre (ou vos) UserControl(s) WPF. Une fois que votre contrôle est fin prêt, dans le projet de votre addin Outlook, rajoutez une référence vers votre projet contenant votre UserControl.
Ensuite ? Il ne vous reste plus grand chose à faire. En effet, lorsque l'on sait que les Form Regions sont en fait composées de simple contrôles WindowsForms classiques, il ne reste plus qu'à faire un peu d'interop pour intégrer notre contrôle WPF. Comment ? En utilisant tout simplement un contrôle Windows nommé ElementHost 
Un ElementHost est un contrôle qui est utilisé lorsque l'on veut, au sein d'une application Windows, pouvoir utiliser un contrôle WPF. L'inconvénient de ce contrôle est qu'il ne permet pas d'afficher plusieurs contrôles WPF en même temps (boutons, Listview, etc...). La solution de contournement ? Créer un UserControl WPF qui hébergera/sera composé de l'ensemble des contrôles WPF dont vous avez besoin. Ensuite, dans votre Form Region, vous utilisez un ElementHost et vous indiquez que le contrôle WPF à utiliser comme enfant sera.... votre UserControl WPF 
Comme ce doit-être un peu flou, voici un petit schéma pour tenter de vous clarifier la situation:
Contrôles WPF => UserControl WPF => ElementHost sur Outlook Form Region
Au final, on se retrouve avec ce que l'on souhaitait: une Outlook Form Region qui intégre/utilise un contrôle WPF:
Pourquoi utiliser du WPF dans Outlook ?
La question, bien que sortant du sujet initial de ce post, mérite de se poser. En effet, on vient de voir qu'il est très simple d'intégrer du WPF (Windows Presentation Foundation) dans Outlook (et plus particulièrement dans une Form Region) mais on pourrait se demander quel est l'intérêt de faire une telle chose ?
Pour être franc, je dois admettre qu'il n'y a pas qu'une seule réponse à cette question. En effet, vous pourriez tout à fait vouloir faire ce genre de chose pour le fun, pour tester ce qu'il est possible de faire ou bien même parce que ce que vosu désirez faire n'est possible (ou est plus simple à faire) en WPF.
Bref, l'important n'est pas pourquoi mais simplement: Oui, il est possible de le faire, comme vous l'avez vu, et cela de façon très très simple !
Pour ceux que cela intéresse, vous trouverez une source d'exemple (Visual Studio 2008 Beta 2) à cette adresse: WPFInOutlookFormRegions.zip
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 :