Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Gérer des paramètres personnalisés du plugin Silverlight

Une application Silverlight est hautement configurable et de nombreuses stratégies existent pour rediriger un utilisateur vers une page ou une autre, notamment le système de Navigation introduit dans SL3. Mais il est aussi possible de configurer le comportement d’une application depuis la balise qui déclare le Plugin, offrant tout un panel d’autres possibilités…

Exemple : gadgets et menus

Pour rendre les choses concrètes supposons un gadget écrit en Silverlight ou plus simplement un menu animé qui sera insérer dans des pages HTML ou ASPX. Selon la page où il apparaît, ce menu peut certainement avoir des comportements différents. On peut souhaiter un mode “novice” affichant l’essentiel sur une page d’accueil et un mode “expert” affichant plus de choix pour les pages intérieures par exemple.

Bref, on doit pouvoir passer à l’application des paramètres personnalisés à l’initialisation, c’est à dire depuis la balise du plugin.

Déclarer le paramètre

Qui de la poule ou de l’œuf… avant de déclarer le paramètre encore faudrait-il lui donner un nom et en fixer les valeurs possibles.

Déclaration dans le code C#

Dans notre exemple l’application Silverlight peut fonctionner en mode Novice ou en mode Expert (rien n’interdit que cela ne change au runtime, nous parlons bien ici d’un paramètre d’initialisation et non d’un choix fermé et définitif).

Pour simplifier et rendre le paramètre et sa valeur disponible dans toute l’application, c’est bien entendu l’objet App dérivant de Application qui sera choisi. On ajoute ainsi à App.xaml.cs les définitions suivantes :

   1:  public enum DisplayMode
   2:  { Novice, Expert }

ainsi que :

   1:  private DisplayMode displayMode = DisplayMode.Novice;
   2:   
   3:  public DisplayMode DisplayMode
   4:  { get { return displayMode; } }

Déclaration dans le code Html

Pour un petit projet exemple de ce type je choisi toujours une application Silverlight simple sans site Web. C’est à dire que VS génère pour nous “TestPage.Hml” qui active le plugin et l’application. Cette page est placée dans \bin\debug (ou release mais il est rare de travailler autrement qu’en mode debug lors de tests de ce type).

Le plus simple consiste ainsi à générer une première fois l’application puis à se placer dans \bin\debug et à copier TestPage.Html en changeant son nom, ici “ExpertView.Html”. Ensuite on ouvre cette nouvelle page HTML et on peut modifier la balise du plugin pour y ajouter notre (ou nos) paramètre(s) :

Dans la balise object, à la suite de toutes les autres sous balises “<param>” nous ajoutons :

<param name="initParams" value="DisplayMode=Expert" />

Choix du lancement de l’application

Bien entendu ce montage est rudimentaire. Lorsque vous exécutez (F5) l’application, c’est TestPage.Html qui est lancé et qui ne contient pas le nouveau paramètre. Cela permettra de tester la gestion de la valeur par défaut du paramètre et de s’assurer que tout marche même si le paramètre est omis.

Pour tester la page en mode “expert”, après une construction du projet, ouvrez le répertoire bin\debug et lancez à la main “ExpertView.html”, l’application sera en mode expert..

Mais… mais… oui ! ne vous inquiétez pas, il en manque un bout :-) j’y viens…

La prise en charge du paramètre

Nous disposons d’un paramètre déclaré dans App.xaml.cs donc visible dans toute l’application. Il est basé sur une énumération précisant les valeurs possibles. Une propriété a été ajoutée à App afin de stocker et rendre disponible le paramètre pour toutes les pages. Cette propriété est basée sur un backing field initialisé à “Novice”.

Nous avons aussi deux pages Html, l’une qui ne contient aucun réglage particulier (et qui devrait déboucher sur un fonctionnement en mode par défaut, donc Novice) et une autre dans laquelle nous avons ajouté le paramètre en mode “Expert”.

C’est bien joli, mais pour l’instant le paramètre n’est pas interprété et son effet ne sera visible nulle part. Nous allons y remédier maintenant :

Interpréter le paramètre

Nous devons maintenant récupérer le paramètre que le plugin Silverlight aura passé à notre application. La méthode Application_Statup de l’objet App semble tout à fait correspondre au besoin.

Voici le code :

   1:  private void Application_Startup(object sender, StartupEventArgs e)
   2:  {
   3:    // Récupération du paramètre plugin
   4:    if (e.InitParams.ContainsKey("DisplayMode"))
   5:     {
   6:      try
   7:        {
   8:           displayMode = 
   9:             (DisplayMode)Enum.Parse(typeof(DisplayMode),
  10:                             e.InitParams["DisplayMode"],
  11:                             true);
  12:         }
  13:         catch { }
  14:      }
  15:     // Create the root page.
  16:     RootVisual = new MainPage();
  17:  }

L’événement StartUp propose des arguments parmi lesquels les fameux paramètres. Il suffit donc de récupérer par InitParams le paramètre qui nous intéresse (DisplayMode). Dans la foulée nous  le transformer en valeur de l’énumération DisplayMode. En cas de problème (paramètre non reconnu) la valeur restera cela par défaut. D’où l’importance de fixer une valeur par défaut et de faire en sorte qu’elle soit toujours celle qui offre le moins “de risque” pour l’application. Ici, le mode “Novice” est bien le plus simple, celui qui offre le moins de possibilité et qui ainsi protège le mieux l’application.

Voilà… le paramètre est récupéré, la propriété DisplayMode de App est disponible pour toutes les pages de l’application.

Utiliser le paramètre

Reste à utiliser le paramètre quelque part pour se prouver que tout ce montage fonctionne bien.

Le plus simple ici consiste à faire afficher à la page principale le nom du mode dans lequel on se trouve. MainPage.xaml contient ainsi un TextBlock qui sera initialisé dans le Loaded de la page :

   1:  public MainPage()
   2:  {
   3:   InitializeComponent();
   4:   Loaded += Page_Loaded;
   5:  }
   6:   
   7:  void Page_Loaded(object sender, RoutedEventArgs e)
   8:  {
   9:    txtDsiplayMode.Text = 
  10:          "Mode d'affichage : " + 
  11:          ((App)Application.Current).DisplayMode;
  12:  }

On remarque que nous sommes obligés de transtyper Application.Current en (App), sinon nous ne verrions pas la propriété ajoutée, qui n’existe bien entendu pas dans la classe Application parente.

Conclusion

je vous fais grâce d’une capture écran, selon qu’on exécute TestPage.html ou ExpertView.html on obtient l’affiche du mode “Novice” ou “Expert”.

La gestion des paramètres personnalisés est donc très simple et permet de rendre une application Silverlight plus versatile et plus facile à intégrer dans une application Web classique. Il y a mille utilisations possibles, à vous de les inventer selon vos besoins !

(code source du projet VS2008 à télécharger :  

   )

Stay Tuned !

blog comments powered by Disqus