Archive for the 'WPF' Category


Laurent Bugnion’s MVVM light toolkit for Silverlight and WPF

1 commentaire

    Laurent Bugnion propose au téléchargement un kit facilitant la conception Model View View Model. Pour rappel, MVVM est une déclinaison du design pattern MVC. Vous pouvez en trouver une explication ici : http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

    Une autre librairie MVVM performante est disponible à cette adresse pour les projets WPF :  http://wpf.codeplex.com/Wiki/View.aspx?title=WPF%20Model-View-ViewModel%20Toolkit.

    Laurent propose quant à lui un mini framework qui s'accorde plus facilement aux développements s'appuyant sur Expression Blend tant pour les projets Silverlight que pour les projets WPF. De ce point de vue, nous manquions cruellement de framework car les solutions existantes sont pour la majeure partie orientée vers des développements WPF et éloignés des contraintes liées à l'utilisation de Blend en production...

    Windows 7 RC

    Aucun commentaire


      La version release candidate de windows seven est accessible aux abonnés MSDN depuis ce matin. J'avais assez envie de changer mon bon vieux Windows Xp, j'ai donc installé 7 sur deux postes dont un mac book pour le tester. Première bonne chose, je n'ai aucun problème de compatibilité, tout fonctionne directement sans heurts. Deuxième bonne nouvelle, sur VMWare, sur un simple macbook c'est rapide et efficace pourtant j'utilise de nombreux logiciels en même temps, Expression Blend, Visual Studio, Office, Photoshop, Flash, etc... On ressent l'effort de Microsoft pour apporter un maximum de performances et de stabilité au système. Seven s'annonce prometteur avec de nombreuses améliorations sur l'ergonomie notamment sans toutefois mimer MacOs, son grand concurrent. La grande nouveauté est l'intégration d'une machine virtuelle XP directement au sein de 7 ce qui permettra de faire tourner n'importe quel programme compatible avec XP. Il faudra tout de même attendre la version finale pour avoir une idée de ce système. La version RC quant à elle devrait être accessible dans le courant du mois de mai pour le grand public...

      La propagation événementielle Bubbling en C#

      Aucun commentaire

        En tant que développeur ou même intégrateur vous avez sans déjà entendu parler de modèle événementiel. Le modèle événementiel d'un langage logique comme par exemple C# est crucial car c'est lui qui permet les interactions utilisateur.

        Le modèle événementiel repose sur deux principes importants :

        · Le premier est le principe de diffusion d’événements, par exemple lorsque vous cliquez sur un bouton celui-ci diffuse un évènement Click

        · Le second principe est celui d’écouteur. Il est bien beau de pouvoir diffuser des évènements, cependant il faut être à l’écoute de ceux-ci pour déclencher une action adéquate. L’objet qui réagit aux événements diffusés est appelé écouteur. En générale, l’écouteur est une méthode comme par exemple la méthode Page_Loaded.

        On retrouve ces deux principes dans la vie réelle, voici un exemple :

        · Vous décidez de prendre un abonnement à un site Web d’annonces immobilières, le fait de vous abonner fait de vous un écouteur. En effet, à chaque nouvelle annonce, vous recevrez un email d’information concernant le bien immobilier. Vous écoutez le site Web qui agit en tant que diffuseur de l’évènement « nouvelle annonce mise en ligne ». A chaque nouvelle annonce reçue vous décidez ou non de visiter le bien. Ce qui correspond bien à une action en retour.

        · Importante mais souvent oubliée cette phase est pourtant très importante : lorsque vous avez trouvé le bien le plus approprié, vous décidez d’arrêter la souscription à ce site, dès lors vous ne recevrez plus d’email. Autrement dit vous supprimez l’écouteur :)

        C’est exactement ce qui arrive lorsque vous développez pour Silverlight. C# voici les deux mêmes méthodes écrites différemment, vous remarquerez que l’écriture est nettement plus appropriée et claire, de plus vous aurez une aide à la complétion via l’IntelliSense :

        · souscription :

        //Diffuseur.Événement += écouteur ;
         
        monRectangle.MouseLeftButtonDown += monRectangle_MouseLeftButtonDown;

        · désinscription :

        //Diffuseur.Événement -= écouteur ;
         
        monRectangle.MouseLeftButtonDown -= monRectangle_MouseLeftButtonDown;

        Il est important de connaitre au moins ces bases car nous allons aborder un point assez spécifique aux langages de haut niveaux. En fait lorsqu'un objet graphique diffuse un événement ce n'est pas forcément l'objet auquel on a souscrit un écouteur. Je m'explique : lorsqu'on crée une série de menus au sein d'une boucle, on ne souhaite peut-être pas à chaque fois ajouter l'écoute du click sur chacun de ces menus. Pourquoi ?

        1 - parce que cela est assez gourmant en performance et en mémoire
        2 - parce que pour chaque menu il faudra supprimer l'écoute si besoin

        Pour éviter de mettre un écouteur sur chaque menu, il suffit simplement de mettre un écouteur sur le conteneur de ceux-ci. En fait lorsque vous souscrivez un écouteur à un conteneur d'objet lorsque l'événement est diffusé vous avez la possibilité de réupérer l'objet source diffusant l'événement au sein du conteneur. je vous ai fait un joli schéma tout en haut.

        Je vous donne également un exemple d'utilisation ici :

        private void CreateMenu()
        {
              var i = 0;
              foreach (string menu in myMenus)
              {
                    Debug.WriteLine(menu);
                    var monMenu = new Menu();
                    //monButton.Content = menu;
                    monMenu.Name = menu + "_btn";
                    monMenu.Titre = menu;
                    monMenu.num = i;
                    monMenu.Height = 22;
                    monMenu.Margin = new Thickness(0, 10, 0, 0);
                    i++;
                    myStack.Children.Add(monMenu);
         
                    //ici on évite d'écrire la chose en dessous ::
                    //monMenu.MouseLeftButtonUp += new MouseButtonEventHandler(monMenu_MouseLeftButtonUp);
         
              }
         
              myStack.MouseLeftButtonUp += new MouseButtonEventHandler(monMenu_MouseLeftButtonUp);
        }
         
        void monMenu_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
              //en premier je teste si je clique bien sur un objet de type Menu
              Debug.WriteLine(e.OriginalSource);
         
              //e.OriginalSource renvoie bien l'objet source qui diffuse l'événement
              Debug.WriteLine("le nom :: " + (e.OriginalSource as Menu).Name);
         
              int actualMenu = (e.OriginalSource as Menu).num;
              rubTo.ContinueTo((double)(actualMenu * -215));
              rubTween.Start();
         
        }

        Il est à noter qu'il est possible d'arrêter la propagation événementielle dans certains cas cela est vraiment pratique car la propriété MouseChildren n'existe pas à priori en C#. Pour arrêter la propagation événementiel il suffira simplement de faire :

        void monMenu_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
              //là j'arrête la propagation
              e.Handled = true;
        }

        Moonlight release

        Aucun commentaire
          times reader

          Le project Moonlight 1 est disponible depuis le 20 janvier au téléchargement. Pour rappel Moonlight est un portage du lecteur Silverlight sur des systèmes non supportés nativement. Ce projet repose sur le framework Mono qui est un portage de .Net sur plusieurs distributions du  système Linux dont MacOS X. Ce projet a trois objectifs :

          • Donner un environnement de développement Silverlight sur d'autres plate-forme que Windows
          • Porter le lecteur Silverlight sur Linux
          • permettre la création d'applications Desktop Silverlight sur linux un peu comme Air.

          Il est clair que pour un lecteur multi-système comme Silverlight, proposer un environnement de développement autre que Windows pourrait être judicieux. Ainsi l'application du Times ' Reader ressemble comme deux goutte d'eau à une application traditionnelle. Le moteur de texte de Silverlight étant vraiment très performant, celle-ci a été réalisable simplement et l'affichage de pavés de texte animés est fluide et vraiment agréable.vous pouvez la télécharger ici.

          Il devrait subsister toujours cette période d'un an entre une version de Silverlight et une version de moonlight, voici la roadMap actuelle pour Moonlight 2 :

          versions Date
          Alpha 18 Mars 2009
          Beta Mi-Avril 2009
          Final Septembre 2009

          Utiliser l’API de Reflection au sein de Silverlight

          Aucun commentaire

          J'ai dernièrement eu besoin de récupérer toutes les méthodes static d'une classe afin d'afficher le résultat visuel de celles-ci. En fait l'idée était d'afficher la courbe correspondante à chaque équation de mouvement contenues dans la classe TweenedEquations. Pour cela il suffit dans le framework Silverlight d'utiliser l'Api de Reflection contenue dans le package System.Reflection. Je mets ici en ligne la portion du code que j'ai utilisé afin d'automatiser l'instanciation automatisée d'un UserControl (composant) personnalisé. Read more »

          VisualStateManager disponible dans Blend 2 SP1 pour les projets WPF

          Aucun commentaire

          Visual State Manager

          Visual State Manager

          Je relaye cette news car ce serait dommage de la manquer. Jusqu'à maintenant le VisualStateManager était une fonctionnalité propres aux projets Silverlight 2 (vous trouverez une vidéo sur l'utilisation du VisualStateManager en français ici) cependant il est désormais possible de télécharger le WPF ToolKit, celui-ci propose notamment l'intégration du VisualStateManager pour Blend 2. Pour récupérer pleinement cette fonctionnalité, je vous conseille d'aller voir ce site. C'est vraiment un bonne nouvelle qui présage d'une importante évolution pour le futur de Blend. Pour ma part je l'ai essayé et rien à dire sinon que l'intégration n'est pas encore faite au niveau des composants eux-mêmes pour le moment. Biensur le VisualStateManager existe pour n'importe quel USerControl mais il n'est pas réellement implémenter pour les composants ce qui est assez logique. Ainsi vous ne pouvez pas encore gérer les états d'un bouton, Slider ou ListBox via ce Manager comme vous le faites sur Silverlight.

          Le font manager, la petite révolution wpf

          2 commentaires

            Salut à tous,

            il n'y a pas si longtemps j'écrivais un article sur comment embarquer des polices au sein de WPF. A l'époque(1an en arrière), cela était très fastidieux car l'intégrateur devait passer par Visual Studio 2005 pour effectuer cette tâche en générale réservé aux graphistes. Aujourd'hui tout cela est oublié grâce au FontManager : un nouvel onglet directement accessible depuis l'interface de Blend 2. Il vous suffira simplement de sélectionner la ou les polices puis de cocher ou d'entrer les glyphes que vous souhaiter embarquer. Voici le petit screenShot de cet outil :

            C'est quand même une très bonne nouvelle, franchement WPF est une bonne technologie et prend une bonne tournure. Je suis également Flasheur et ça serait bien sympa si la version 10 de Flash (cs4) avait ce genre de petit panneau au lieu de gérer ça dans des champs textes différents, vous pensez pas ? On pourrait me répondre que la bibliothèque de Flash le gère... Oui mais non car tous les glyphes de la polices sont embarqués et du coup le poids du swf est énorme... Quand à Silverlight peut-être Blend intègrera ce panneau pour la version 3 on sait jamais...

             

            Tutoriel Avancé Blend

            Aucun commentaire

              Après avoir animé un petit tuto avec Thibault Imbert, c'est Aude Mousset qui s'y colle. Pour rappel Aude est spécialiste des technologies WPF et travaille pour la société I-Breed.

              On apprend à faire de beaux boutons Web 2.0 très originaux mais surtout on apprend au passage que WPF est extrèmement souple et adapté aux graphistes.

              This movie requires Flash Player 9

              Tuto Blend Découverte

              Aucun commentaire

                Voici un petit Tutoriel que j'anime avec Thibault Imbert,

                on discute ensemble autour de la technologie Windows Presentation Foundation, bref si vous voulez avoir juste un avis ou une opinion sur la technologie et savoir commen bien débuter c'est la vidéo qu'il vous faut. :)

                This movie requires Flash Player 9

                Le blog technode

                Aucun commentaire

                  Technode

                  Une de mes confrère poste souvent sur son blog des trucs sympa, comme par exemple comment "faire des sushis rien qu'avec la bouche", ou encore "comment animer des ressources de couleurs sous WPF", le dernier truc en date se passe donc ici.

                  Next Page »