Archive for February, 2011

InertialSlider [Custom Control]

Aucun commentaire


    Dans le cadre d'un projet Silverlight sur tablette tactile, j'ai récemment eu besoin d'un Slider sans limite de valeur. Autrement dit, la valeur Maximum est indéfinie ou alors très éloignée. L'idée est d'augmenter la vitesse d'incrémentation au fur et à mesure du drag du contrôle Thumb. Vous pouvez tester le contrôle ci dessous. Il est possible de définir le pas du changement de valeur ainsi que la finesse d'accélération.

    Install Microsoft Silverlight


    Les sources de base ainsi que le projet de test sont téléchargeables à cette adresse.

    Fournir ItemsSource à partir de champs/propriétés statiques

    1 commentaire

      Lorsque l'on crée un Objet valeur sans logique, il est souvent nécessaire de récupérer la liste de ses propriétés ou de ses champs statiques. De cette manière vous pouvez l'affecter à une propriété ItemsSource de ComboBox ou d'AutoCompleteBox et ainsi, filtrer une listBox de ValueObject. Sous Silverlight, rien n'est réellement prévu à cet effet. Il serait possible de créer une énumération en affectant des attributs à chacune des valeurs contenues. Toutefois cette méthode est un peu lourde, avec un peu de réflexion on arrive à un résultat efficace sans se compliquer la vie. Il faut tout d'abord créer une classe contenant les champs ou les propriétés statiques :

      public static class WindowsPhone7
      {
           public static string Undefined = " ";
           public static string Omnia7= "Samsung Omnia 7";
           public static string Focus= "Samsung Focus";
           public static string HD7= "HTC HD 7";
           public static string Optimus7= "LG Optimus 7";
           public static string VenuePro= "Dell venue Pro";
      }

      Ensuite côté VueModèle, vous pouvez exposer une liste de ces dernières grâce à un peu de réflexion et à Linq :

      public List<String> WP7Types
      {
          get
           {
               Type t = typeof(WindowsPhone7);
       
               //GetProperties en lieu et place de getFields si beseoin
               var call = (from opp in t.GetFields() select opp.GetValue(t) as string).ToList();
       
               return call;
          }
      }

      Rien d'autre à faire à part un binding sur le ItemsSource d'un ItemsControl et le tour est joué :)