http://michael.carbenay.info

WF4 – Afficher / Cacher des informations dans le designer

18 mars 2010  –  C# | Boulot | WPF | Workflow Foundation  –  0 Commentaires

Je consulte depuis quelques jours pas mal de blogs concernant Workflow Foundation dont celui de Jérémy Jeanson qui contient des tonnes d’informations super utiles. En voyant son billet intitulé [WF4] Activity avec vue détail masquée par défaut, vive WPF!, je me suis demandé si il n’existait pas une solution me permettant, à moi en tant que développeur, de faire la même chose sans trop empiéter sur le boulot du designer.

Donc, le but du jeu, c’est de permettre, dans le concepteur de workflow, de gérer le mode collapse/expand des activités, donc de passer de ca :

image

à ça (enfin, avec des informations utiles, pas simplement avec du texte…):

image

Comme il ne s’agit de modifier l’apparence du contrôle mais bien d’implémenter une fonctionnalité, je ne suis pas fan d’une approche basée sur des ControlTemplates. Je sais bien qu’il ne s’agit que d’un concepteur pour une activité et donc qu’il y a peu de chance qu’un designer passe par là, mais bon, c’est un reflexe :)

Pour faire la même chose, écrivons d’abord un convertisseur qui permet de prendre transformer un booleen en Visibility. En plus, ça pourrait resservir dans plein d’autres cas :

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Windows.Data;
   6: using System.Windows;
   7:  
   8: namespace WorkflowConsoleApplication3
   9: {
  10:     public class VisibleIfTrue : IValueConverter
  11:     {
  12:         #region IValueConverter Members
  13:  
  14:         public object Convert(object value, Type targetType, 
  15:             object parameter, System.Globalization.CultureInfo culture)
  16:         {
  17:             if (value is bool)
  18:                 return (bool)value ? 
     Visibility.Visible : Visibility.Collapsed;
  19:             if (value is bool?)
  20:                 return ((bool?)value).GetValueOrDefault() ?
  21:           Visibility.Visible : Visibility.Collapsed;
  22:             return Visibility.Collapsed;
  23:         }
  24:  
  25:         public object ConvertBack(object value, Type targetType, 
  26:             object parameter, System.Globalization.CultureInfo culture)
  27:         {
  28:             throw new NotImplementedException();
  29:         }
  30:  
  31:         #endregion
  32:     }
  33:  
  34:  
  35: }

L’implémentation est un peu basique, mais on s’en contentera pour les besoins de la démonstration.

Une fois ce convertisseur réalisé, on va pouvoir s’en servir pour afficher ou cacher le contenu du concepteur :

   1: <sap:ActivityDesigner 
x:Class
="WorkflowConsoleApplication3.ExempleDesigner"
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     x:Name="This"
   5:     xmlns:local="clr-namespace:WorkflowConsoleApplication3"
   6:     xmlns:sap="clr-namespace:System.Activities.Presentation;
     assembly=System.Activities.Presentation"
   7:     xmlns:sapv="clr-namespace:System.Activities.Presentation.View;
      assembly=System.Activities.Presentation"
>
   8:     
   9:     <sap:ActivityDesigner.Resources>
  10:         <local:VisibleIfTrue x:Key="VisibleIfTrue" />
  11:     </sap:ActivityDesigner.Resources>
  12:     <StackPanel>
  13:         <Grid>
  14:             <TextBlock Text="La version minimale du designer" 
TextWrapping
="Wrap" />
  15:         </Grid>
  16:         
  17:         <Grid Visibility="{Binding ElementName=This, 
     Path=ShowExpanded, Converter={StaticResource VisibleIfTrue}}"
>
  18:             <Label Content="des informations supplémentaires"/>
  19:         </Grid>
  20:  
  21:     </StackPanel>
  22: </sap:ActivityDesigner>

Voila ! évidemment, si vous voulez intervertir les deux blocs au lieu de cacher seulement le second, il vous faudra faire le même travail (mais avec un VisibleIfFalse) sur la première grid.

Ajouter un commentaire


(Affichera votre icône Gravatar)

biuquote
  • Commentaire
  • Aperçu immédiat
Loading