mercredi, novembre 3 2010

Template conditionnel d'une listbox WPF

1) Introduction

Il existe de multiples façons de réaliser un changement de rendu d'une ListBox WPF. Il est souvent possible de se limiter à la définition d'un Template mais ce n'est pas toujours possible. Voici donc différentes pistes pour réaliser ce changement de rendu.

Lire la suite...

mardi, novembre 27 2007

Modifier le comportement de la listbox WPF

La gestion de la sélection (en mode extended) est différente en WPF si on considère que la référence "Windows" est l'explorateur Windows .... Il est cependant possible de changer le comportement en quelques lignes de code ;-). Ce post explique un minimum comment modifier le comportement du click droit ... Il faudrait une plus grosse analyse pour vérifier que cette modification ne modifie pas les évenements qui sont lancés...

Lire la suite...

lundi, novembre 5 2007

Fenêtre de dialogue en WPF

Ceux qui ont déjà écrit du WinForm ont certainement déjà rencontré une demande simple comme "Création d'un dialogue validant telle commande". Il s'agit ni plus ni moins d'un écran de confirmation de validation de ce que l'on aurait encodé au préalable. Ainsi, en WinForm l'appel de la méthode ShowDialog() renvoie en retour à la fermeture de la fenêtre le résultat (une valeur contenue dans l'énumartion DialogResult). Mais qu'en est-il en WPF ?

Lire la suite...

mercredi, octobre 31 2007

Mécanisme de mise à jour de l'objet business/contrôle en WPF

Par défaut, lorsque l'on utilise le binding .net en wpf, la source (le contrôle visuel) est mise à jour lorsque la cible (l'objet business) change. Tout ceci se passe via l'implémentation de l'interface INotifyPropertyChanged. Ce post explique en quelques mots les différents types de mise à jour du contrôle disponible en WPF.

Lire la suite...

mercredi, octobre 17 2007

XBAP + WebService .NET 2.0

Xbap est magique. Il permet de lancer une application sur le poste client sans installer l'application. Je dirais que c'est un clone de l'applet Java mais en WPF. J'étais donc plein de rêves, envies,... Certes, l'application s'exécute dans une sandbox (on accède donc pas au contenu fichier du pc sur lequel on lance l'application)... Mais cela ne me dérangeait pas pour les applications qui pouvaient reposer sur ce modèle. En effet, je me disais qu'il était possible de faire passer beaucoup de choses via WCF. Et la ce fut le clash ..... En effet, XBAP ne supporte pas le wcf ... Mais ma déception ne s'arrête pas la ... En effet, il impossible de lancer une application XBAP dans firefox ... RE déception !!!!. Mais ... la bonne nouvelle ! Microsoft prévoit d'implémenter une partie de WCF (BasicHttpBinding) et le support de Firefox dans .Net 3.5. (un peu tard et pas suffisant a mon goût ;-). Mais ce post n'est pas là pour vous dire XBAP .... C'est nul etc ... Nous loin de la ... Si on fait abstraction de tous ces problèmes, XBAP est réellement sympa. Ce post explique comment supporter les webservices .NET 2.0 dans xbap !

Lire la suite...

lundi, octobre 8 2007

TextBlock Vs Label

Le textblock est arrivé en wpf ... Je me suis longtemps demandé ce qu'il offrait de différent avec le label qui existe également en WPF et que l'on utilisait en winforms... Voici quelques éléments de réponses (liste non exhaustive ;)).

Lire la suite...

dimanche, octobre 7 2007

Sauvegarde d'un objet Visual dans un fichier bmp, gif ou png

Il est possible sans difficulté de sauver le rendu d'une fenêtre WPF ... voir même d'un bloc de contrôles ou d'un seul contrôle. Pour cela, il faut passer par une petite étape de sauvegarde très simple que nous expliquerons ici.

Lire la suite...

jeudi, octobre 4 2007

Ou sauver les styles ?

La notion de style est bien connue du monde ASP.NET mais peut être un peu moins du monde client lourd ... Mais ce discours est dépassé avec l'arrivée de WPF ... En effet, il est possible d'ajouter du style sur nos applications comme on pourrait le faire via des css sur nos pages web. Mais cela ne se limite pas à ajouter ce que le CSS ajoute. En effet, il est également possible en styles wpf d'ajouter ce que le couple javascript/css nous offrait .... Nous pouvons changer la couleur lorsque la souris se trouve sur le bouton etc,... Mais la question que tout le monde se pose .... Ou stocker ses styles ?

Lire la suite...

mercredi, octobre 3 2007

Triggers en WPF

La notion de trigger est "nouvelle" en développement d'interface riche. Nombre de développeurs (moi y compris) ont utilisé bon nombre de trigger en SQL .... En effet, quel bonheur de pouvoir exécuter une action "on insert" dans une table. WPF amène 'de loin' ce concept dans nos interfaces. En effet, il est tout à fait possible de pouvoir colorier un bouton lorsque la souris sera sur le contrôle. Vous me direz "il est possible de le faire via les evenements en winform !".... Je vous dirai "oui tout à fait." Mais ici ... 0 lignes de codes ! La question que tout le monde se pose ... "Quelles sont les classes disponibles en WPF pour les triggers et comment cela fonctionne ???". Il existe plusieurs classes héritant de TriggerBase.

Lire la suite...

lundi, octobre 1 2007

Les différents Binding WPF + CompositeCollection

Mais qu'est ce dont le data binding ??? Il s'agit d'un mécanisme présent dans toutes les technologies .net permettant une liaison simple entre les données (mes objets business) et les contrôles de présentation. Prenons un exemple simple, je modifie le contenu d'une textbox qui affichait mon nom. Automatiquement, mon objet business Utilisateur va prendre en compte la modification de mon nom. Il existe différentes classes disponible sous WPF pour le databinding. Trois classes héritent de BindingBase.
  • Binding
  • MultiBinding
  • PriorityBinding
Ce post introduira un minimum les différents comportements, fonctionnalités de ces binding. Mais ... ce n'est pas tout. Ce post parlera également des CompositeCollection.

Lire la suite...

mardi, septembre 25 2007

La gestion du sort dans les grilles WPF

Pourquoi passer à WPF? Je vais donner un argument dans ce post. Ne trainons pas et allons directement au fond des choses, il est possible de remplir une listview avec des données. Celles-ci sont représentées via des contrôles standard .net ou via des template pour chaque colonne ... Rien que ce point est tres intéressant ... Mais il y a encore mieux par rapport a la DataGrid de .NET 1.x ou la DataGridView de .NET 2.0 en winform.

Lire la suite...

lundi, septembre 24 2007

ValidationRules sur un ensemble de DependencyObject en WPF

Nombreux sont ceux qui ont déjà utilisé les nouveautés de WPF pour gérer la validation au niveau des contrôles. Ceci fonctionne admirablement bien sur un contrôle. Mais cela ne suffit pas toujours. En effet, j'aimerais par exemple pouvoir désactiver le bouton "Ok" en cas d'erreur dans une des TextBox de mon contrôle.... Et la c'est la catastrophe ;-). En effet, Validation.GetHasErrors(monUserControl) ne regarde absolument pas si les enfants qu'il contient ont une erreur. Dès lors, il faut trouver une autre méthodologie. Ainsi, j'ai réalisé un petit contrôle WPF permettant de m'indiquer toutes les erreurs sur le niveau et les niveaux inférieurs.

Lire la suite...

samedi, septembre 22 2007

ObjectDataProvider ? ;-)

ObjectDataProvider, c'est quoi ? C'est une bonne question que je me suis demandé en rencontrant des limites avec le binding des propriétés en WPF. En effet, je voulais lancer des méthodes (avec ou sans paramètre). Je voulais instancier des objets dans mon XAML sans passer par mon code c#. Et ... une nuit, je suis tombé dans la documentation du MSDN sur l'ObjectDataProvider. Après l'avoir utilisé, je me suis dit qu'il serait sympathique de faire un petit topo de ce qu'il est possible de faire avec cet objet.

Lire la suite...

dimanche, septembre 16 2007

Correcteur orthographique sous WPF ?

Il existe un moyen pour activer le correcteur orthographique sur les contrôles héritant de TextBoxBase. Ceci concerne donc en WPF le RichTextBox et le TextBox. Il suffit d'activer la propriété SpellCheck.IsEnabled à "True" à votre contrôle pour activer le correcteur. Il est également possible de modifier le dictionnaire utilisé en changeant la langue du contrôle en modifiant la propriété Language (exemple: fr-FR). Cependant, tout n'est pas encore au point. En effet, il est impossible de modifier le dictionnaire et il n'existe que quatre dictionnaires installés (français, anglais, allemand et espagnol). Il est également dommage que l'on ne puisse pas ajouter des annotations à ces contrôles mais ceci fera partie d'un autre post ;-).

jeudi, septembre 13 2007

NHibernate 1.2 + WPF Suite et fin ?

Après avoir modifié la dll de NHibernate pour supporter des collections modifiables dans des threads différents et pour supporter les interfaces .net 3.0 pour le changement d'elements dans une collection, j'ai voulu appliquer ces différents tests sur un cas "concret". J'ai réutilisé des entités d'un projet perso et la ce fut le crash ;-).
En effet, j'ai voulu afficher dans une listbox le nom du client de la facture en mettant DisplayMemberPath de ma listbox a "Customer.Name". Mais .... au lancement de mon application, j'ai recu une belle exception AmbiguousMatchException. Après localisation de l'erreur ... "Oh méchant DynamicProxy !!" et analyse de l'erreur .... plusieurs pistes de solution sont apparues (merci Steve pour ton avis également ;-). Et la .... en gérant moi même le TypeDescriptor en implémentant dans mes entités l'interface ICustomTypeDescriptor .... Tout fonctionne !!!! :-).

mercredi, août 29 2007

Surcharge des styles XAML en WPF

Voici un petit "conseil" afin de ne pas faire trop exploser la taille de vos fichiers XAML et de factoriser un minimum ceux-ci pour les styles. Il est en effet tout à fait possible d'inserer une notion d'héritage dans les styles. Il y a moyen d'écraser une valeur d'une propriété dans un style "enfant" ou d'ajouter des valeurs à de nouvelles propriétés. Il faut simplement faire hériter le style "enfant" du style "parent" via l'attribut "BasedOn".

Exemple :

<Style x:Key="simpleTextStyle">
   <Setter Property="TextBlock.Background" Value="Green"/>
   <Setter Property="TextBlock.FontFamily" Value="Arial"/>
</Style>

<Style x:Key="childTextStyle" BasedOn="{StaticResource simpleTextStyle}">
   <Setter Property="TextBlock.FontSize" Value="20"/>
</Style>

<Style x:Key="overrideTextStyle" BasedOn="{StaticResource simpleTextStyle}">
   <Setter Property="TextBlock.Background" Value="Red"/>
</Style>

Bonne factorisation ;-)

mardi, août 28 2007

Binding WPF : Astuce 1

Petite astuce en WPF ... et en binding !


Voici deux exemples qui font exactement la même chose à savoir l'affichage de deux textes identiques "Hello tout seul".

  1. <Canvas>
      <TextBlock Name="tx" Text="Hello tout seul"/>
      <TextBlock Text="{Binding ElementName=tx, Path=Text}"/>
    </Canvas>
    
  2. <Canvas>
      <TextBlock Name="tx" Text="Hello tout seul"/>
      <TextBlock Text="{Binding ElementName=tx, Path=(TextBlock.Text)}"/>
    </Canvas>
    


Question : Lequel de ces exemples est le plus performant ?

Réponse : La seconde solution est la plus performante. En effet, on passe via la reflexion du CLR .NET pour l'exemple 1. Pour l'exemple 2, on n'utilise directement les propriétés "DependencyProperty". Il y a dès lors un gain de performances.
Page top