[Silverlight] Ce qu’il faut retenir de la semaine du 04/07/2011

By Aymeric on juillet 11th, 2011
  • Silverlight est mort, longue vie au XAML (Silverlight is Dead, Long Live XAML) par Steven Forte
  • Encore un article sur le grand débat du moment sur la mort programmée de Silverlight. Steven Forte apporte la possibilité d’avoir une fusion de SIlverlight et WPF pour donner un Silverlight amélioré. La question du XAML exécuté nativement est également posée.

  • Donner le focus à un contrôle Silverlight en XAML (Setting focus on a control in Silverlight using XAML) par Craig Jewiss
  • Craig Jewiss propose ici un moyen de donner le focus à un contrôle en XAML via l’utilisation d’un trigger.

  • Comment créer une roue de chargement en XAML (How to create a circular loader using XAML) par Kunal Chowdhury
  • Un bonne exemple de création de loader en Silverlight sans utiliser une seule ligne de C#. Ce loader est basé sur la rotation d’un Canvas.

  • Comment créer des catégories dans les propriétés de Blend et Silverlight pour vos contrôles (How to categorize control properties for XAML view inside Blend and Visual Studio) par Kunal Chowdhury
  • Lors de la création d’un Custom Control, les propriétés personnalisées sont ajoutées dans les catégories « Others » ou « Miscellaneous » dans Visual Studio et Blend. Pour que ce soit plus pratique, voici un attribut à rajouter à vos propriétés pour les placer dans les catégories existantes ou dans de nouvelles catégories.

    [Silverlight] Ce qu’il faut retenir de la semaine du 20/06/2011

    By Aymeric on juin 27th, 2011
  • Aide au debug Silverlight (Silverlight Debug Helper) par Peter Kuhn
  • Lors d’un développement il n’est pas possible de débugger une application sous Firefox car Visual Studio n’arrive pas à y attacher son debugger. Le même phénomène peut se dérouler sur Chrome. Peter Kuhn a développé un add-in Visual Studio pour remédier à ce problème.

  • L’intellisense en XAML pour les Databindngs (XAML Intellisense for Databindings) par Tau Sick
  • La version 6 de ReSharper inclue une fonctionnalité qui manque grandement à Visual Studio, l’intellisense pour les Databindings en XAML.

  • L’interface Metro s’invite chez Telerik (Metro UI for RadControls for Silverlight and WPF) par Telerik
  • Les RadControls pour Silverlight et WPF se mettent au style Metro instauré par Windows Phone et qu’on retrouvera dans Windows 8.

  • Silverlight TV : les APIs 3D en Silverlight 5 (Exploring 3D) par John Papa
  • Cette emission traite des APIs 3D apportées par Silverlight 5.

    [Silverlight] Ce qu’il faut retenir de la semaine du 06/06/2011

    By Aymeric on juin 14th, 2011
  • HTML5 et Silverlight, quel futur ? par Vikram Pendse
  • Beaucoup de rumeurs circulent à propos de l’avenir de Silverlight et de sa mort au profit de HTML5. Vikram, MVP Silverlight, explique dans cet article que Silverlight ne va pas mourir. Son utilité n’est juste pas la même que celle d’HTML5.

  • Elévation de privilèges en Silverlight 4 par Richard Costall
  • Article sur les applications Silverlight en Out Of Browser avec elévation de privilèges vous permettant d’accéder  à une partie du système de fichiers, à COM, à l’aspect de la fenêtre, etc.

  • 6 astuces pour que votre application passe la certification du MarketPlace par Yalla Apps Blog
  • Voici 6 astuces pour éviter que votre application soit refusée lors de sa soumission sur le MarketPlace notamment au niveau des icônes ou de la fonction « back » sur les téléphones.

  • Appliquer une animation sur une transformation par Suresh
  • Petit article pour les plus débutant expliquant comment appliquer une animation (Storyboard) sur une transformation de type RotateTransfrom.

    [Silverlight] Ce qu’il faut retenir de la semaine du 30/05/2011

    By Aymeric on juin 7th, 2011
  • « Options » en Silverlight par Daniel Fisher
  • Daniel Fisher expose son code permettant d’enregistrer côté client des « options » nécessaires à l’application. Afin de persister ces données, il choisit de les enregistrer dans l’IsolatedStorage proposé par Silverlight.

  • « Tethering sur les Windows Phone 7 LG et Samsung par HackingSilverlight
  • Une fonctionnalité que l’on aimerait voir de base sur Windows Phone 7 : le tethering (ou le partage de connexion internet depuis le téléphone). Des astuces existent cependant pour faire fonctionner le tethering sur les téléphone LG et Samsung.

  • Découvrez toutes les nouveautés de Mango en 10minutes par Julien Dollon et Soumow Atitallah
  • Soumow et Julien vous font découvrir les nouveautés de la prochaine version de Windows Phone 7.1 (Mango) dans la SUPINFO Web TV.

  • Détecter les téléphones avec moins de 256Mo de RAM par EugeneDotnet
  • Les applications Windows Phone 7 ne doivent pas utiliser plus de 90Mo de RAM pour les téléphones de moins de 256Mo de RAM sous peine d’être refusées sur le MarketPlace. Voici le moyen de différencier ces téléphones de ceux disposant de plus de RAM afin de différencier les traitements à réaliser dans vos applications.

     

    [Silverlight] Fichiers de styles et erreur « Cannot find a Resource with the Name/Key xxxx »

    By Aymeric on juin 7th, 2011

    Lorsque votre application grossit (son style aussi), il est intéressant de séparer vos styles dans différents fichiers pour gagner en clareté. Il vous suffit ainsi de déclarer vos fichiers dans le fichier App.xaml comme ceci :

    <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="Color.xaml" />
                    <ResourceDictionary Source="Control.xaml" />
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>
    

    Ceci ne fonctionne que si le fichier Control.xaml n’utilise pas de ressources déclarées dans Color.xaml et inversement. Contrairement à WPF qui tient compte de l’ordre de déclaration (Color.xaml est avant Control.xaml), Silverlight charge les ressources de manière indépendante interdisant ainsi les références entre les diffèrents dictionnaires.

    Dans notre exemple, Color.xaml contient :

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
        <Color x:Key="MyColor">#FFF98110</Color>
    
    </ResourceDictionary>
    

    Alors que Control.xaml contient :

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
        <Style TargetType="TextBlock">
            <Setter Property="Foreground"
                    Value="{StaticResource MyColor}" />
        </Style>
    
    </ResourceDictionary>
    

    Control.xaml fait donc référence à une ressource déclarée dans Color.xaml. Pour faire fonctionner ce code, il faut déclarer Color.xaml dans Control.xaml comme ceci :

    <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Color.xaml" />
        </ResourceDictionary.MergedDictionaries>
    

    Imaginer ceci dans 10 autres fichiers de style faisant référence à MyColor déclarée dans Color.xaml. Le contenu de Color.xaml serait duppliqué et inclus 10 fois (1 fois par fichier). Inutile de dire que cette pratique est plutôt mauvaise d’un point de vue performance. K.M s’est basé sur cet article pour créer une classe fonctionnant en Silverlight :

    public class SharedResourceDictionary : ResourceDictionary
        {
            public static Dictionary<Uri, ResourceDictionary> _sharedDictionaries =
               new Dictionary<Uri, ResourceDictionary>();
    
            private Uri _sourceUri;
            public new Uri Source
            {
                get { return _sourceUri; }
                set
                {
                    _sourceUri = value;
                    if (!_sharedDictionaries.ContainsKey(value))
                    {
                        Application.LoadComponent(this, value);
                        _sharedDictionaries.Add(value, this);
                    }
                    else
                    {
                        CopyInto(this, _sharedDictionaries[value]);
                    }
                }
            }
    
            private static void CopyInto(ResourceDictionary copy, ResourceDictionary original)
            {
                foreach (var dictionary in original.MergedDictionaries)
                {
                    var mergedCopy = new ResourceDictionary();
                    CopyInto(mergedCopy, dictionary);
                    copy.MergedDictionaries.Add(mergedCopy);
                }
                foreach (DictionaryEntry pair in original)
                {
                    copy.Add(pair.Key, pair.Value);
                }
            }
        }
    

    Explications :

    Au lieu de recharger le code de Color.xaml dans chaque fichier, il sera chargé la 1re fois puis stocké dans un Dictionaire (Dictionary<> C#). Lorsqu’un autre fichier essayera d’inclure Color.xaml, son contenu sera directement récupéré depuis le Dictionary<>.

    Le code précédemment ajouté à Control.xaml devient :

    <ResourceDictionary.MergedDictionaries>
            <shared:SharedResourceDictionary Source="/MergedDictionary;Component/Color.xaml" />
        </ResourceDictionary.MergedDictionaries>
    

    sans oublier la déclaration du namespace shared :

    xmlns:shared="clr-namespace:MergedDictionary"
    

    Attention, dans la propriété Source du SharedResourceDictionary, « Color.xaml » ne fonctionne plus, il faut impérativement mettre « /MergedDictionary;Component/Color.xaml« .

    Projet utilisé dans l’article : ici.

    Code et explications originals : ici.