Création de Custom control avec Silverlight#

Dans un souci de capitalisation ou encore d’industrialisation, nous avons souvent besoin de développer des custom control réutilisables. Dans ce post nous allons voir comment :

- Créer un custom control simple

- Le tester dans une application Silverlight

- Le personnaliser

Création du custom control

Nous allons maintenant créer un custom control, pour ce faire nous allons tout d’abord créer un nouveau projet de type “Silverlight class library” et le nommer “MyCircleControl”. Dans ce projet, renommez le fichier class1.cs à MyCircle.cs et répondez “oui” quand visual studio vous demande si vous voulez faire un refactor sur la classe. Ouvrez le fichier MyCircle.cs et faites hériter la classe MonCustomControl de control. Dans ce fichier, nous allons définir la logique du contrôle et les propriétés qu’il va exposer à ces utilisateurs.

Créez ensuite un répertoire nommé Themes à la racine du projet et créez dedans un fichier texte et nommez le generic.xaml. Dans ce fichier, nous allons pouvoir définir nos ressources à savoir les styles ou encore les valeurs pour les propriétés de notre contrôle. Une propriété intéressante à définir est la propriété “Template” que la classe MonCustomControl a hérité de la classe Control et qui va nous permettre de définir l’aspect visuel du contrôle. Voici la solution visual studio que vous devriez avoir.

image

Click droit sur le fichier generic.xaml et cliquer sur “Propriétés”, modifier les deux propriétés suivantes :

- Effacer le contenu de la propriété “Custom Tool”

- Modifier la propriété “Build Action” à “Resource”

Pour l’instant nous allons créer un custom control qui contiendra un cercle de couleur bleu.

Pour cela, ouvrez le fichier generic.xaml et placez y le code suivant :

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                    xmlns:custom="clr-namespace:MyCircleControl;assembly=MyCircleControl" 
                    >
    <Style TargetType="custom:MyCircle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="custom:MyCircle">
                    <Grid>
                        <Ellipse x:Name="ACircle" Width="100" Height="100" Stroke="Blue"></Ellipse>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

Quelques explications s’imposent :

La balise ResourceDictionary indique que ce fichier est un dictionnaire de ressources. Nous définissons un style avec la balise “Style” qui va s’appliquer à notre contrôle MyCircle. Dans cette balise nous allons définir le contenu visuel de notre contrôle, pour cela nous allons définir la propriété Template que notre contrôle a hérité de “Control” et dessiner un cercle de couleur bleu.

Testons le contrôle

Pour tester notre contrôle, nous allons créer un projet de type “Silverlight Application” dans la même solution, nommez le “MyCircleApplication”. Lorsque Visual studio vous demande si vous voulez créer un projet web pour héberger l’application Silverlight cliquez sur “OK” sans faire de changements

image

Vous devriez maintenant avoir une solution qui ressemble à ça :

image

Il  ne nous reste plus qu’à :

- Ajouter la référence vers le projet MyCircleCOntrol dans le projet “MyCircleApplication”

- Ouvrez le fichier “MainPage.xaml” et inclure le namespace de mon contrôle en rajoutant cette propriété à la balise “UserControl”

xmlns:circle="clr-namespace:MyCircleControl;assembly=MyCircleControl" 

Puis dans la balise “Grid” nous allons ajouter notre contrôle de la manière suivante :

<Grid x:Name="LayoutRoot">
      <circle:MyCircle></circle:MyCircle>
</Grid>

Compilez maintenant la solution et lancez la page MyCircleApplicationTestPage.html vous devriez voir une page blanche avec un cercle bleu au milieu.

Personnalisation du control

Ce cercle est bien beau :) mais un peu trop rigide à mon goût, supposons qu’on veuille rendre notre contrôle un peu plus personnalisable en donnant la possibilité de changer sa couleur de remplissage. Pour cela nous allons créer une Depenedency Property de type Brush au sein de notre classe MyCircle que nous allons appeler FillColor.

public Brush FillColor
{
       get { return (Brush)GetValue(FillColorProperty); }
       set { SetValue(FillColorProperty, value); }
}

// Using a DependencyProperty as the backing store for FillColor.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty FillColorProperty =
     DependencyProperty.Register("FillColor", typeof(Brush), typeof(MyCircle), null);

Cette propriété pourra désormais être définie lors de l’ajout de ce contrôle de la manière suivante :

<circle:MyCircle FillColor="Chocolate"></circle:MyCircle>

Mais pour l’instant même si notre propriété FillColor est remplie, elle ne peut agir d’aucune manière sur la couleur de fond de notre cercle. Pour cela nous allons lier la propriété Fill de l’Ellipse à notre propriété FillColor de telle manière que chaque fois que FillColor change la propriété Fill de l’Ellipse est modifiée automatiquement, voici la balise Ellipse modifiée dans le fichier generic.xaml:

<Ellipse x:Name="ACircle" Stroke="Blue" Width="100" Height="100"  Fill="{TemplateBinding FillColor}"></Ellipse>

Voilà tout,  maintenant définissez la propriété FillColor à “Chocolate” (ou à une autre couleur), recompilez la solution et lancez la page MyCircleApplicationTestPage.html vous devriez voir ceci :

image

Wednesday, December 16, 2009 6:09:00 PM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

Ajouter le support de l’Intellisense de ExtJs sous Visual Studio 2008#

J’ai eu à montrer ExtJs récemment pour les contrôles UI puissants et aboutis qu’il propose, et comme d’habitude j’ai eu droit aux réflexions du genre : c’est bien  mais c’est galère sans l’intellisense!!! à croire qu’on ne peut plus s’en passer ce que je comprends tout à fait, on s’habitue très vite au confort et nous avons du mal à s’en séparer :) c’est souvent vécu comme une régression.

Voici la solution pour bénéficier de l’IntelliSense ExtJs sous Visual Studio :

- Glissez déplacer respectivement vos fichiers ext-base.js et ext-all-debug.js au tout début du fichier Javascript dans le quel vous voulez utiliser ExtJs, vous devriez avoir ces deux lignes

/// <reference path="../Framework/ext-2.2.1/adapter/ext/ext-base.js" />
/// <reference path="../Framework/ext-2.2.1/ext-all-debug.js" />

- Appuyez maintenant sur Ctrl + Shift + J, Visual Studio va mettre à jour l’intellisense

Et voilà, lorsque vous tapez maintenant Ext. dans votre fichier JS vous allez pouvoir parcourir l’intellisense ExtJs sous Visual Studio, dorénavant vous n’aurez plus aucune excuse pour ne pas utiliser ExtJs ;)

Sunday, December 13, 2009 11:09:39 PM (Romance Standard Time, UTC+01:00) #    Comments [2]  | 

 

Sauvegarder / Restaurer vos informations personnelles sous Windows mobile avec PIM Backup#

Après une année et demi de bons et loyaux services j’ai décidé de remplacer mon HTC TyTn2 par un HTC Diamond 2. Le problème qui s’est posé comme à chaque fois qu’on change de téléphone est comment transférer mes contacts, mes messages, mes tâches, mes RDV…

La réponse la plus simple est de dire : bein c’est très simple tu synchronise tes informations Outlook via Active sync et après tu synchronise ton nouveau téléphone avec Outlook et le tour est joué. Mais si vous n’êtes pas un utilisateur de Outlook, avec cette solution vous êtes bien embêté.

Si vous êtes dans ce dernier cas je vous recommande vivement PIM Backup qui vous permettra de sauvegarder / restaurer vos informations personnelles très facilement. Par informations personnelles j’entends contacts, SMS, MMS, Mails, RDV, appels, journaux d’appels.

PIM Backup est livré sous forme d’un fichier exe, vous n’avez qu’à le copier sur votre périphérique mobile (non sur le PC) effectuer votre sauvegarde. Il va alors vous créer un fichier de backup, vous n’aurez plus qu’à prendre l’exe et le fichier backup et les coller sur votre nouveau périphérique mobile et restaurer les données à partir de PIM Backup en sélectionnant le fichier de backup.

Avantages :

- Simple d’utilisation

- Pas besoin d’installation

- Gère toutes vos informations personnelles

- Marche très bien

- Gratuit

Wednesday, December 02, 2009 3:30:01 PM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

Microsoft Business Integration RoadShow#

Hier (01/12/2009) je me suis déplacé aux locaux de Microsoft à Issy pour assister à l’évènement “Business Integration RoadShow”. C’était l’occasion de voir autre chose que ce que je fais tous les jours et de m’ouvrir un peu à l’univers de l’intégration.

L’objectif de cette journée était de présenter la plateforme applicative Microsoft et comment elle peut répondre à des problématiques :

- D’intégration d’applications et de données métiers au sein de l’entreprise

- D’automatisation de processus métier

- De simplification de l’accès aux données

Bien les présentations n’étaient pas très techniques (ce qui était prévu) et plutôt orientées vers un public décisionnaire, les retours d’expérience des différents partenaires présents nous ont permis de savoir par des cas pratiques le contexte d’utilisation de BizTalk Server, sa pertinence au sein d’un projet et ses points forts.

Je ne vous cache pas que la raison principale qui m’a poussée à assister à cet évènement c’est l’annonce de Master Data Services (MDS) la nouvelle brique de SQL Server qui permet de répondre aux problématiques de type MDM (Master Data Management) et qui sera incluse dans la version SQL Server 2008 R2 courant 2010. La CTP de SQL Server 2010 R2 est déjà disponible ici.

La présentation de MDS a été faite en fin de journée et a duré environ 50 minutes. Et même si tout le monde est sorti de la salle en se disant que le produit n’était pas mature (ce qui est normal vu qu’il est encore en CTP), il est sans doute très intéressant et répond pleinement à la problématique de type MDM.

En ce qui me concerne, j’ai été ravi par la découverte du domaine MDM et de tout ce qui tourne autour à savoir l’intégration, l’interaction entre plusieurs applications, … Je reviendrais sur MDM et surtout MDS plus tard dans de prochains posts.

Wednesday, December 02, 2009 2:43:04 PM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

All content © 2012, Zied Nemili