faq
jobs

[Tip] Accéder à une Resources.resw depuis le code Behind

Si on définit dans le fichier Resources.resw une localisation directement liée à un contrôle comme par exemple :
resources

Si on souhaite récupérer cette traduction depuis le code et bien ça marche pas :

var resourceLoader= new Resources.ResourceLoader();
string myText = resourceLoader.GetString("txtTitle.Text");
//myText = "" !!!!

MSDN


En effet MSDN dit clairement « The GetString method cannot retrieve resources qualified with a property identifier.  » : https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh965323.aspx

Pourtant il y a une astuce


L’astuce et d’utiliser un slash à la place du point

var resourceLoader= new Resources.ResourceLoader();
string myText = resourceLoader.GetString("txtTitle/text");

Il convient qu’il ne doit pas y avoir d’autre traduction nommé seulement « txtTitle » dans le fichier Resources.resw

0  

OnSuspending : Demander au système plus de temps pour sauver ses données

« S’il vous plait m’sieur, j’peux avoir plus de temps pour mémoriser des données avant ? »

Dans l’App.Xaml.cs, vos pouvez « solliciter » le système pour qu’il vous attribue du rab pour finaliser une sauvegarde lorsque votre application passe à l’état de « Onsuspending » :
On lui demande via ExtendedExecutionSession. et ce qui est marrant c’est qu’on doit se justifier :) avec ExtendedExecutionReason.

Entre le deferral qui permet d’indiquer au système que vous utilisez par exemple du code async et que vous avez besoin d’un peu de temps pour finaliser

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
   
    using (var session = new ExtendedExecutionSession{ Reason = ExtendedExecutionReason.SavingData})
    {
        session.Description = "Envoi des data";
       
        if (await session.RequestExtensionAsync () == ExtendedExecutionResult.Denied)
            //le système veut pas, j'ai que 3 secondes
            SauvegardeRapide();
        else
            //le système est ton pot, tu as 8 secondes
           SauvegardeComplete();
    }

    deferral.Complete();
}

Facile non?

site-map
0  

Restituer la navigation après une terminaison

Lorsque l’utilisateur va basculer d’une application à une autre, l’application passe donc en arrière plan et passe dans un état d’attente et le système peut décider de la terminer si la mémoire du Device se réduit. Avant ça, si l’utilisateur revient sur votre application, il doit revenir sur la bonne page et s’il avait saisi des données faire qu’elle y soit toujours. Si vous ne prévoyez pas ce scénario, l’application revient à son état initiale et ça aura pour but de faire bouillir votre utilisateur. Pour garantir une bonne expérience à l’utilisateur, il va être necessaire d’ajouter quelques bout de code pour gérer ce cycle de vie.

Quel code ajouter à votre appli :

Revenir sur la même page

Mémorisation dans l’event OnSuspending

On va ici mémoriser la page qui était affichée. Entre le deferral qui permet d’indiquer au système que vous utilisez par exemple du code async et que vous avez besoin d’un peu de temps pour finaliser (environ 5 secondes max)

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
   
    //Mémo de la page actuelle
    Frame frame = Windows.Current.Content as Frame;
    ApplicationData.Current.LocalSettings.Values["NavigationState"] = frame.GetNavigationState();

    deferral.Complete();
}

Retour sur la page dans l’event Onlaunched

On insérera ces lignes dans l’évènement OnLaunched de l’App.xaml.cs

protected override void OnLaunched(LaunchActivatedEventArgs e)
{    
    //.....
    if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
    {
        //Si y'a une page de mémorisée
        if (ApplicationData.Current.LocalSettings.Values.ContainsKey("NavigationState"))
        {
            rootFrame.SetNavigationState((string)ApplicationData.Current.LocalSettings.Values["NavigationState"]);
        }
    }

    // Placez le frame dans la fenêtre active
    Window.Current.Content = rootFrame;
}

Voyons maintenant comment mémoriser les données : Restituer les données après une terminaison

1  

Restituer les données après une terminaison

Dans l’article précédent Restituer la navigation après une terminaison on a su revenir sur la bonne page de votre application. Ici on va remettre les données que l’utilisateur avait par exemple commencé à saisir.

Déclarer une variable static IsSuspending dans l’App.xaml.cs et la passer à TRUE dans l’évènement OnSupending

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
   
    IsSuspending = true;
   
    //Mémo de la page actuelle
    Frame frame = Windows.Current.Content as Frame;
    ApplicationData.Current.LocalSettings.Values["NavigationState"] = frame.GetNavigationState();

    deferral.Complete();
}

MaPage.Xaml.cs : OnNavigationFrom

Dans votre page, on va maintenant mémoriser les données dans l’évent OnNavigationFrom (on quitte la page) puis les restituer dans l’évent OnNavigationTo (On arrive sur la page) :

protected override void OnNavitationFrom(NavigationEventArgs e)
{
    bool suspending = ((App)App.Current).IsSuspending;
    if (suspending )
    {
       var composite = new ApplicationDataCompositeValue();
       composite["madonnee1"] = this.textBoxName.Text;
       composite["madonnee2"] = this.textBoxAge.Text;
       ApplicationData.Current.LocalSettings.Values["Mesdonnees"] = composite;
     
       //On peut utiliser ça aussi :
      //state["madonnee1"] = this.textBoxName.Text;
    }
}

MaPage.Xaml.cs : OnNavigationTo

Et au retour de la page, si c’est une nouvelle navigation on vide par sécu le « composite » sinon on regarde s’il existe et restitue les info :

protected overrire void OnNavigationTo (NavigationEventArgs e)
{
   if (e.NavigationMode == NavigationMode.New)
   {
       ApplicationData.Current.LocalSettings.Values.Remove("Mesdonnees");
   }
   else
   {
       if (ApplicationData.Current.LocalSettings.Values.ContainsKey("Mesdonnees"))
       {
          var composite = ApplicationData.Current.LocalSettings.Values["Mesdonnees"] as ApplicationDataCompositeValue;
          this.textBoxName.Text = (string)composite["madonnee1"];
          this.textBoxAge.Text = (string)composite["madonnee2"];
   
          ApplicationData.Current.LocalSettings.Values.Remove("Mesdonnees");
       }
   }
}
0  

Tips de Bing pour les développeurs

Mi-Octobre, l’équipe de Bing a publié des outils très sympathiques pour nous faire gagner du temps pour certaines tâches. Notons qu’en septembre dernier ils avaient ajouté des outils pour les musiciens (« guitar tuner »)

En premier lieu il vous faut changer la région de votre Bing ! Accédez à http://www.bing.com et en haut à droite cliquer sur l’icône représentant un engrenage, cliquez ensuite sur « paramètres ». Dans le nouvel écran cliquer sur [ Région ] et choisissez « États-Unis – Anglais » puis [Enregistrer]. Notez que si vous bloquez tous les cookies, ça risque de ne pas, encore, fonctionner.

Au retour vous pourrez donc tester plein de petits outils ! Non ne tapez pas « guitar tuner », ici on parle « Dév » ^^ mais par exemple :

Color Picker

Bing-Color-Picker

Différents « formateurs » de données

Il suffit alors de saisir l’un de ces mots :

  • XML formatter
  • Javascript formatter
  • JSON formatter
  • HTML formatter
  • CSS formatter

x-formater

Et enfin un générateur de QR Code et un la table de correspondance des code Ascii :

  • Table ASCII
  • QR code

Creator-tools-P5-100815

site-map
0  
content