Dans ma page Xaml, j'ai un cadre.
J'essaie d'avoir un événement backButton juste pour naviguer à l'intérieur du cadre.
alors j'ai essayé d'utiliser ce morceau de code
public MainPage(){
this.InitializeComponent();
if(Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) {
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
}
private void HardwareButtons_BackPressed(object sender,BackPressedEventArgs e) {
if(insideFrame.CanGoBack())insideFrame.GoBack();
else Application.Current.Exit();
}
mais dans le téléphone après l'événement HardwareButtons_BackPressed
, il ferme l'application.
Il semble y avoir un comportement par défaut du bouton Précédent sur MainPage ...
Comment puis-je le réparer? Et dans Windows 10, ajoute-t-il de nouveaux événements pour gérer la navigation arrière?
[Mettre à jour]
Maintenant, j'ai découvert qu'il était préférable d'utiliser SystemNavigationManager
dans Windows 10 au lieu de Input.HardwareButtons.BackPressed
.
SystemNavigationManager currentView = SystemNavigationManager.GetForCurrentView();
Vous devez indiquer au système que vous avez géré l'appui sur le bouton retour en définissant la propriété Handled de BackPressedEventArgs sur true.
private void OnHardwareButtonsBackPressed(object sender, BackPressedEventArgs e)
{
// This is the missing line!
e.Handled = true;
// Close the App if you are on the startpage
if (mMainFrame.CurrentSourcePageType == typeof(Startpage))
App.Current.Exit();
// Navigate back
if (mMainFrame.CanGoBack)
{
mMainFrame.GoBack();
}
}
Windows 10 (UWP) inclut SystemNavigationManager in Windows.UI.Core
namespace à des fins de navigation uniquement.
Étant donné que SystemNavigationManager
fait partie de Windows Universal Platform
, il est donc pris en charge par toutes les familles de périphériques fonctionnant sous Windows 10, y compris Mobile et PC.
Si vous voulez juste gérer la navigation pour une seule page. Suivez les étapes suivantes
Étape 1. Utiliser l'espace de noms Windows.UI.Core
using Windows.UI.Core;
Étape 2. Enregistre de nouveau l'événement de demande pour la vue actuelle. Le meilleur endroit pour cela est le constructeur principal de la classe après InitializeComponent()
.
public MainPage()
{
this.InitializeComponent();
//register back request event for current view
SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;
}
Étape 3. Gestion de l'événement BackRequested
private void Food_BackRequested(object sender, BackRequestedEventArgs e)
{
if (Frame.CanGoBack)
{
Frame.GoBack();
e.Handled = true;
}
}
rootFrame
Le meilleur endroit pour manipuler tout le backbutton pour toutes les vues est App.xaml.cs
Étape 1. Utiliser l'espace de noms Windows.UI.Core
using Windows.UI.Core;
Étape 2. Enregistre de nouveau l'événement de demande pour la vue actuelle. Le meilleur endroit pour cela est OnLaunched
juste avant Window.Current.Activate
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
...
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
Window.Current.Activate();
}
Étape 3. Gestion de l'événement BackRequested
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
}
Références- Bouton arrière en UWP
J'espère que cela est utile à quelqu'un!
Suivez ces étapes:
Ajoutez deux variables globales à votre page comme ci-dessous.
private NavigationHelper navigationHelper;
private RelayCommand _GoBackCommand;
Ajoutez ensuite le code ci-dessous dans le constructeur de la page spécifique.
// below code is to override the back navigation
// hardware back button press event from navigationHelper
_GoBackCommand = new RelayCommand
(
() => this.CheckGoBack(),
() => this.CanCheckGoBack()
);
navigationHelper.GoBackCommand = _GoBackCommand;
// ---------
Ajoutez ensuite les deux méthodes que nous venons de déclarer dans le constructeur.
private bool CanCheckGoBack()
{
// this should be always true to make sure the app handles back buton manually.
return true;
}
private void CheckGoBack()
{
// this will be execute when back button will be pressed
}
ps. - Pour cela, vous devrez peut-être utiliser BasicPage
au lieu de BlankPage
lors de l'ajout d'une nouvelle page.
espérons que cela aidera ..!
Essayez ceci. Cela fonctionnera pour la navigation arrière.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (Frame.CanGoBack)
{
e.Handled = true;
Frame.GoBack();
}
}
}