none
Bouton Back RRS feed

  • Question

  • Bonjour

    j'aurai une petite question à propos de l'utilisation du bouton retour arrière sur Windows phone

    pour l'utiliser dans un page de mon application

    j'ai tout d'abord insérer ce-ci dans le .cs de la page

    using Windows.Phone.UI.Input;

    puis toujours dans le .cs  ( dans le dans le namespace et à la fin du public sealand partial class)

    private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
            {
                this.Frame.Navigate(typeof(PageAccueil));
            }

    Cependant lorsque que je presse le bouton retour, le périphérique revient à la page d'acceuil (mettant l'application en suspens) ce qui est le comportement par défaut.

    Quelqu'un pourrait-il m'expliquer mon erreur?

    Merci d'avance!

     



    dimanche 30 novembre 2014 15:36

Réponses

  • Si vous voulez revenir à la page précédente, c'est effectivement GoBack() qu'il faut utiliser.

    Le service de navigation de WP met dans une pile les pages que vous visitez. 


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 1 décembre 2014 07:21
  • Bonjour,


    Pour l'implémentation, je te propose de faire :

    Dans le constructeur de App.xaml.cs :

    HardwareButtons.BackPressed += HardwareButtons_BackPressed;

    Puis, d'implémenter la méthode :

    private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
        var rootFrame = Window.Current.Content as Frame;
        if (rootFrame.CanGoBack)
        {
            rootFrame.GoBack();
            e.Handled = true;
        }
    }


    NB : tu peux alors supprimer la fonction

    HardwareButtons_BackPressed

    Dans PageDivers.

    Tiens nous au courant.





    lundi 1 décembre 2014 07:31

Toutes les réponses

  • Et en ajoutant :

    e.Handled = true;
    ?


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    dimanche 30 novembre 2014 18:59
  • Dans quel partie du code précisément (désolé mais je n'ai pas de grande compétences pour l'instant en programmation!)

    Après, ce que je veux faire c'est que lorsque le bouton retour arrière est pressé, je veux que l'application reviennent sur une un page défini dans le code, donc si vous avez un autre code qui fait la même chose, sa me convient parfaitement!

    Merci d'avance

    dimanche 30 novembre 2014 19:21
  • Bonjour,

    Comme ceci :

    this.Frame.Navigate(typeof(PageAccueil));

    e.Handled = true;


    La page que tu veux atteindre est-elle celle qui précède ta page actuelle ?


    • Modifié Samuel LIOULT dimanche 30 novembre 2014 19:30 précision
    dimanche 30 novembre 2014 19:29
  • même avec le e.Handled=true le retour arrière ne marche pas...

    A toute fin utile voici le code intégrale de la page

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices.WindowsRuntime;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    using Windows.Phone.UI.Input;
    
    
    // Pour en savoir plus sur le modèle d’élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkID=390556
    
    namespace NomDeLAplication
    {
        /// <summary>
        /// Une page vide peut être utilisée seule ou constituer une page de destination au sein d'un frame.
        /// </summary>
        public sealed partial class PageDivers : Page
        {
            public PageDivers()
            {
                this.InitializeComponent();
            }
    
            /// <summary>
            /// Invoqué lorsque cette page est sur le point d'être affichée dans un frame.
            /// </summary>
            /// <param name="e">Données d'événement décrivant la manière dont l'utilisateur a accédé à cette page.
            /// Ce paramètre est généralement utilisé pour configurer la page.</param>
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
            }
    
            private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
            {
                this.Frame.Navigate(typeof(PageAccueil));
                e.Handled = true;
    
            }
    
        }
    }

    je veux en effet revenir sur la page précédente (je pourrai mettre un goback ?)
    dimanche 30 novembre 2014 19:47
  • Si vous voulez revenir à la page précédente, c'est effectivement GoBack() qu'il faut utiliser.

    Le service de navigation de WP met dans une pile les pages que vous visitez. 


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 1 décembre 2014 07:21
  • Bonjour,


    Pour l'implémentation, je te propose de faire :

    Dans le constructeur de App.xaml.cs :

    HardwareButtons.BackPressed += HardwareButtons_BackPressed;

    Puis, d'implémenter la méthode :

    private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
        var rootFrame = Window.Current.Content as Frame;
        if (rootFrame.CanGoBack)
        {
            rootFrame.GoBack();
            e.Handled = true;
        }
    }


    NB : tu peux alors supprimer la fonction

    HardwareButtons_BackPressed

    Dans PageDivers.

    Tiens nous au courant.





    lundi 1 décembre 2014 07:31
  • "Dans le constructeur de App.xaml.cs :

    HardwareButtons.BackPressed += HardwareButtons_BackPressed;

    "

    Concrètement, je le met dans quelle partie de la page?

    "Puis, d'implémenter la méthode :"

    La méthode je la met dans la page en question au aussi dans le App.xaml.cs? (si je la met dans App.xaml.cs, ou précisément?

    Merci encore pour toutes vos aides!

    lundi 1 décembre 2014 18:53
  • Le constructeur est :

    public App()
    {
        // Tu peux le mettre ici...
        // J'imagine qu'il y a déjà du code ici
        // ... ou ici...
    }

    Sinon, tu peux aussi le mettre dans la méthode OnLaunched. (toujours dans App.xaml.xs)

    Pour la méthode

    HardwareButtons_BackPressed

    Tu la mets où tu veux dans le App.xaml.cs.

    mardi 2 décembre 2014 08:01
  • J'ai donc le code suivant:

    public App()
            {
                this.InitializeComponent();
                this.Suspending += this.OnSuspending;
                this.HardwareButtons.BackPressed += this.HardwareButtons_BackPressed;
            }
            
            private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
            {
                var rootFrame = Window.Current.Content as Frame;
                if (rootFrame.CanGoBack)
                {
                    rootFrame.GoBack();
                    e.Handled = true;
                }
            }

    J'ai cependant l'erreur:

    'Mon.App' ne contient pas une définition pour 'HardwareButtons' et aucune méthode d'extension 'HardwareButtons' acceptant un premier argument de type 'Genetree.App' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)

    pourtant j'ai bien ajouté

    using Windows.Phone.UI.Input;

    en début de page!

    Votre aide me serai extrêmement utile, merci d'avance!

    samedi 6 décembre 2014 20:16
  • Bonjour,

    Dans Visual Studio, essaies de faire "Générer > Nettoyer la solution". Puis réessaie.

    dimanche 7 décembre 2014 14:02
  • Bonjour,

    j'ai essayer de nettoyer la solution mais le problème persiste (j'ai aussi essayer d'émuler l'application, mais le problème bloque le déploiement)

    si vous avez une autre idée pour régler le problème cela m'aiderai grandement!

    merci d'avance

    mercredi 10 décembre 2014 14:55