Trucs et astuces Windows Phone 7

by Nicolas Calvi 9. août 2010 17:16

Voici mon premier article sur Windows Phone 7, je suis en train de décortiquer ce nouveau support et je vais donc maintenant vous exposer quelques fondamentaux biens utiles quand on développe sur cette plateforme.

Premièrement la navigation entre les pages de son projet. Il y a plusieurs façons de faire, je vais vous présenter celles qui seront les plus couramment utilisées.

Classe NavigationService

Dans les pages héritées de PhoneApplicationPage, il existe une propriété NavigationService qui permet de gérer cette transition à partir de la page courante et donc de conserver un historique de navigation. Dans le code behind de toute page, vous pouvez faire appel à la fonction Navigate(Uri) qui permet de passer à la page suivante.

using System;
using Microsoft.Phone.Controls;

namespace MonApplicationWP7
{
  public class MaPageWP7: PhoneApplicationPage
  {
    // Constructeur de la page
    public MaPageWP7()
    {
      // Appel a la fonction NavigationService.Navigate(Uri)
      this.NavigationService.Navigate(new Uri("/MonAutrePage.xaml"))
    }
  }
}

Il existe d'autres fonctions bien utiles, vous pouvez trouver le détail ici.

RootVisual et NavigationService

Si vous n'avez pas accès à votre page courante (notamment si vous êtes en MVVM) vous pouvez quand même accéder au NavigationService par le bié de la propriété Application.Current.RootVisual, qui vous donne la page en cours d'affichage. Un simple cast et un accès a sa propriété NavigationService vous permet de naviguer vers une autre page.

using System;
using Microsoft.Phone.Controls;

namespace MonApplicationWP7
{
  public class UneClasse
  {
    // Constructeur de la page
    public UneClasse()
    {
      // Navigation a partir du RootVisual
      PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;

      if (root != null)
        root.Navigate(new Uri("/MonAutrePage.xaml"));
    }
  }
}

Il est a noter ici que l'on utilise les services de navigation de la Frame et non de la page, mais cela revient au même.

UriMapper

Il est possible de créer une table de navigation dans notre application Windows Phone 7, ce qui permet notamment de mieux stucturer ses Uri quand on veux faire appel au NavigationService, ou écrire les Uri dans les contrôles Silverlight a partir du XAML.
Pour utiliser cette technique il y a deux choses a faire. Premièrement, dans le fichier App.xaml, i lfaut déclarer dans la partie Resources notre table de navigation.

<Application xmlns:nav="clr-namespace:System.Windows.Navigation;assembly=Microsoft.Phone">
  <Application.Resources>
    <nav:UriMapper x:Key="MonUriMapper">
      <nav:UriMapper.UriMappings>
        <nav:UriMapping Uri="/Root" MappedUri="/Default.xaml"/>
        <nav:UriMapping Uri="/Menu" MappedUri="/MonMenu.xaml"/>
        <nav:UriMapping Uri="/Liste/{numero}" MappedUri="/MesListes/Liste{numero}.xaml"/>
        <nav:UriMapping Uri="/Liste/{numero}/{param1}" MappedUri="/MesListes/Liste{numero}.xaml?id={param1}"/>
      </nav:UriMapper.UriMappings>
    </nav:UriMapper>
  </Application.Resources>
</Application>

 

Vous remarquez que l'on peut gérer des paramètres dans la table de navigation, cela se gère comme les tables de navigation Silverlight standard, là dessus aucune surprise, Windows Phone 7 reprend les mêmes éléments qu'une application Silverlight lambda.

Dernière étape, mettre cette table de navigation en ressource par défaut dans votre application Windows Phone 7. Pour cela, allez dans le fichier App.xaml.cs et localisez le constructeur et a la fin de celui-ci ajoutez ceci.

// ...
public partial class App: Application
{
  //...
  
  public App()
  {
    // ...
    
    // Affectation de la table de navigation
    this.RootFrame.UriMapper = this.Resources["MonUriMapper"] as UriMapper;
  }
  
  //...
}

Par la suite vous pouvez donc accéder a votre table de navigation juste en indiquant l'alias (dans l'attribut Uri) dans le chemin de navigation.

using System;
using Microsoft.Phone.Controls;

namespace MonApplicationWP7
{
  public class MaPageWP7: PhoneApplicationPage
  {
    // Constructeur de la page
    public MaPageWP7()
    {
      // Appel a la fonction NavigationService.Navigate(Uri)
      
      this.NavigationService.Navigate(new Uri("/Liste/1/24"))
    }
  }
}

Tous ces concepts de navigation, si bien utilisées, permettent a votre application Windows Phone 7 de construire un historique de navigation et donc de permettre quand l'utilisateur clique sur le bouton Back de bien revenir sur la page précédente.

Bouton Back

Justement le bouton Back, comment intercepter son utilisation si l'on veut passer outre son fonctionnement standard. De ce coté rien de plus simple, il existe sur toutes les pages qui héritent de PhoneApplicationPage, un événement sur lequel vous pouvez vous abonner : BackKeyPress.

Il faut le faire sur chaque page de façon indépendant, ce qui permet d'exécuter du code juste avant le traitement de ce click. Si vous voulez annuler le click si le bouton Back, rien de plus simple. Dans la fonction de CallBack de l'événement il vous suffit de renseigner dans le paramètre d'argument System.ComponentModel.CancelEventArgs, la propriété Cancel et la mettre a True.

using System;
using Microsoft.Phone.Controls;

namespace MonApplicationWP7
{
  public class MaPageWP7: PhoneApplicationPage
  {
    // Constructeur de la page
    public MaPageWP7()
    {
      // On se branche sur l'événement
      this.BackKeyPress += new EventHandler<System.ComponentModel.CancelEventArgs>(MaFonctionDeCallBack);
    }
    
    // Fonction de CallBack
    private void MaFonctionDeCallBack(object sender, System.ComponentModel.CancelEventArgs e)
    {
      // J'annule le click
      e.Cancel= true;
    }
  }
}

Comme vous le voyez, il n'y a rien de plus simple, tout reste cohérent avec le Framework Silverlight classique.

Projet Surface LCL : La vidéo

by Nicolas Calvi 5. août 2010 13:02

Voici la vidéo du projet dont je parle dans mon dernier billet, cela vous donne un aperçu de cette application :)

 

Projet Surface : LCL à la carte

by Nicolas Calvi 23. juin 2010 15:30

J'ai participé récement à un beau projet nommé "LCL à la carte pour Microsoft Surface" pour une agence LCL dans Paris. Ce projet a été réalisé avec une talentueuse équipe de Designers (Société externe), de Graphistes (Société externe) et des developpeurs de ma société (Winwise). Ce projet a été réalisé pour la banque LCL (MOA) par la céllule innovation du Crédit Agricole (MOE).

C'est une application NUI (Tactile sur Microsoft Surface) et vous pouvez y aller pour juger par vous même a l'agence LCL du Boulevard Saint-Michel (au 22 du Boulevard dans le 6e à Paris). C'est un projet test qui va permetre de voir l'impact du tactile dans un environement bancaire. L'accent a été mis sur le coté intuitif et l'exploitation complète du surport Microsoft Surface, je vous invite donc a allez tester cette superbe application et nous faire vos retours :)

Techdays 2010 : Webcast en ligne

by Nicolas Calvi 10. mars 2010 22:55

Voilà, la session des Techdays est en ligne.

PAR222 : Créer son outil de modélisation de processus métier en utilisant WF4

Les sources de notre projet sont disponible sur ce billet.

Techdays 2010 : Source session PAR222 (WF4)

by Nicolas Calvi 28. février 2010 18:55

Début février, j’ai animé une session aux Techdays 2010 avec mon ami et collègue Julien Balouka. Notre session s’intitule : Créer sonoutil de modélisation de processus métier en utilisant Workflow Foundation 4(PAR222). La vidéo de la session sera bientôt disponible sur le site des Techdays 2010, je ferais une mise à jourquand elle le sera.

Voici donc avec quelques jours de retard, la solution que nous avons montré durant la session. Je rends donc publique les sources, mais afin que vous puissiez l’utiliser dans de bonne condition, j’ai rédigé un manuel d’installation que je vous conseil de regarder.

Vous pouvez télécharger tous cela à ces adresses :

  - Source de la démo (5,11 mb)

  - Powerpoint de la session (1,17 mb) (inclus dans les sources)

  - Guide d’installation (387,66 kb) (inclus dans les sources)

Pour pouvoir utiliser correctement la démo, il faut que le host Workflow soit toujours lancé pour prendre en compte les Workflows générés, cependant il faudra le relancer à chaque Workflow sauvegarder en base.

Je me permets juste de commenter le contenu des sources afin que vous puissiez mieux appréhender le contenu du l’archive source.

Répertoire « Divers »

Il contient le Powerpoint de la session, le guide d’installation et un backup de la base de données. A cesujet, dans la base se trouve les tables pour la persistance du Workflow, les scripts de création de ses tables se trouve dans le répertoire « C:\Windows\Microsoft.NET\Framework\v4.0.21006\SQL\en »,les deux scripts à exécuter sont « SqlWorkflowInstanceStoreLogic.sql » et « SqlWorkflowInstanceStoreSchema.sql ».

Répertoire « Recrutement »

C’est la solution WPF du designer custom Workflow.

Répertoire « Recrutement.Site »

C’est la solution Silverlight 4 qui nous a permis de tester notre Workflow. Dans cette solution, il y a une Web Référence vers lesservices Workflow dynamique, ce qui nous permet de faire avancer le Workflow. Il y a aussi un pont RIA Services pour l’accès à la base de données.

Répertoire « Recrutement.Site.Web »

C’est la solution Asp.Net d’hébergement de notre site Silverlight, elle contient aussi un modèle EntityFramework 4 pour pourvoir utiliser RIA Services 4, ce qui permet d’avoir un accès à notre base de donnée dans notre module Silverlight.

Répertoire « RecrutementActivies »

C’est la solution ou nous avons créé toutes les activités custom utilisable dans notre Workflow dynamique etpour l’outil de modélisation custom.

Répertoire « Recrutement.ActivitesDesigner»

C’est la solution ou sont entreposés tous les designers custom de nos activités.

Répertoire « RecrutementDBAccess »

C’est une solution pour stocker un modèle Entity Framework qui sera utilisé par les activités et le service webdistant pour le host Workflow.

Répertoire « RecrutementDBService »

C’est une solution pour exposer « RecrutementDBAccess » via WCF.

Répertoire « RecrutementWFHost »

C’est notre solution d’hébergement des Workflows générés par l’utilisateur, il expose les Workflows en créantdynamiquement des points d’accès WCF et permet la gestion de ceux-ci.

Je reste à votre disposition pour tout complément d'information concernant les techniques mises en oeuvre pour cette démo, aucun support ne sera fait sur l'installation de celle-ci ou des problèmes liés à votre environnement de développement. 


Autres

MVP

Hardware Interaction Design & Developpement

Posts récents