Publié mercredi 3 mars 2010 23:50 par Audrey

[WPF] Contrôler son application depuis la taskbar de Windows 7 avec de simples boutons

Avec WPF 4, il est désormais possible de personnaliser le comportement de la taskbar ou barre des tâches lorsque votre application est en cours d'exécution.

Dans la MSDN, on trouve cette image décrivant très bien les différents éléments de l'aperçu d'une application dans la taskbar :

taskbar

Pour personnaliser la plupart de ces éléments, il faut rajouter tout d'abord dans le code XAML de votre interface le code suivant :

1
2
3
4
5
<Window.TaskbarItemInfo>
<TaskbarItemInfo>

</TaskbarItemInfo>
</Window.TaskbarItemInfo>

TaskbarItemInfo est l'élément qui va nous permettre d'accéder à toutes les propriétés concernant notre application dans la taskbar. Voici les propriétés proposées :

TaskbarItemInfo

Et ce que l'on peut obtenir avec ces propriétés :
  • Description : pour changer la description de l'application.
  • Overlay : pour ajouter une image dans l'icône présente dans la barre des tâches.
  • ProgressState : pour changer l'état de la barre de progression.
  • ProgressValue : pour donner une valeur à l'avancé de la barre de progression.
  • ThumbButtonInfos : pour ajouter des boutons.
  • ThumbnailClipMargin : pour modifier les marges de la miniature dans l'aperçu de l'application.

Aujourd'hui nous allons nous concentrer sur les boutons. On souhaite pouvoir contrôler l'application depuis trois boutons présents dans l'aperçu de l'application de la barre des tâches. Voici l'exemple que l'on cherche à avoir (pour ceux qui étaient présents à la session Coding for Fun des Techdays 2010, Mitsu pouvait jouer avec son Tetris grâce à des boutons dans l'aperçu Smile) :

ButtonTaskbar

L'application est composée de deux boutons, permettant chacun d'afficher un message via un MessageBox. On souhaite pouvoir afficher ces messages depuis la taskbar, et aussi pouvoir quitter l'application avec le troisième bouton.

Voici le code pour ajouter les boutons dans l'aperçu de la taskbar :

1
2
3
4
5
6
7
8
9
    <Window.TaskbarItemInfo>
<TaskbarItemInfo>
<TaskbarItemInfo.ThumbButtonInfos>
<ThumbButtonInfo Description="Hello" ImageSource="office1.ico" />
<ThumbButtonInfo Description="Goodbye" ImageSource="office2.ico" />
<ThumbButtonInfo Description="Close" ImageSource="office3.ico" />
</TaskbarItemInfo.ThumbButtonInfos>
</TaskbarItemInfo>
</Window.TaskbarItemInfo>

La balise TaskbarItemInfo.ThumbButtonInfos contient une collection de ThumbButtonInfo qui sont les boutons présents dans notre aperçu. Les propriétés pour chaque bouton sont les suivantes :

ThumbButtonInfo Properties   ThumbButtonInfo Events

Les événements pour ces boutons sont des plus classiques : Changed et Click.

Les propriétés des boutons permettent les actions suivantes :
  • Command, CommandParameter, CommandTarget : permet d'associer un comportement au bouton avec ou sans paramètres, dans le cas de l'utilisation du pattern MVVM avec l'interface ICommand, ces propriétés peuvent être utile pour binder le behaviour correspondant. Sinon l'événement Click suffira simplement.
  • Description : permet de modifier la description qui apparait au dessus du bouton lors du passage de la souris.
  • DismissWhenClicked : permet de fermer l'aperçu lorsque l'on clique sur ce bouton.
  • ImageSource : permet de mettre une image dans  le bouton.
  • IsBackgroundVisible : permet de rendre l'arrière-plan visible.
IsBackgroundVisible = true et IsBackroundVisible = false

BackgroundVisible   BackgroundNotVisible

  • IsEnabled : active ou désactive le bouton en le grisant.
IsEnabled = true et IsEnabled = false (troisième bouton grisé)

IsEnabledTrue  IsEnabledFalse


  • IsInteractive : permet de rendre le bouton cliquable ou non. A la différence du IsEnabled, le bouton reste visible mais sans le griser.
IsInteractive = true et IsInteractive = false (deuxième bouton non cliquable mais non grisé)

BackgroundVisible  IsInteractiveFalse

  • Visibility : permet de rendre visible ou invisible le bouton de plusieurs façons différentes.
Visibility = Visible et Visibility = Hidden et Visibility = Collapsed

IsEnabledTrue  VisibilityHidden  VisibilityCollapsed

Pour notre application, il suffit de relier les événements Click de nos boutons de la taskbar aux événements Click des boutons présents dans l'application :

1
2
3
4
5
6
7
8
9
    <Window.TaskbarItemInfo>
<TaskbarItemInfo>
<TaskbarItemInfo.ThumbButtonInfos>
<ThumbButtonInfo Description="Hello" Click="btnHello_Click" ImageSource="office1.ico" />
<ThumbButtonInfo Description="Goodbye" Click="btnGoodbye_Click" ImageSource="office2.ico" />
<ThumbButtonInfo Description="Close" Click="ThumbButtonInfo_Click" ImageSource="office3.ico" />
</TaskbarItemInfo.ThumbButtonInfos>
</TaskbarItemInfo>
</Window.TaskbarItemInfo>

Et l'on obtient une application que l'on peut piloter à partir des boutons présents dans l'aperçu de la taskbar :

Final
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 :

Les 10 derniers blogs postés

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 4 heures et 23 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59