Xamarin.Forms dans Xamarin Native Projects
En règle générale, une Xamarin.Forms application comprend une ou plusieurs pages qui dérivent de ContentPage
, et ces pages sont partagées par toutes les plateformes d’un projet de bibliothèque .NET Standard ou d’un projet partagé. Toutefois, Native Forms permet d’ajouter des pages dérivées directement aux applications natives ContentPage
Xamarin.iOS, Xamarin.Android et UWP. Par rapport au fait que le projet natif consomme des ContentPage
pages dérivées d’un projet de bibliothèque .NET Standard ou d’un projet partagé, l’avantage d’ajouter des pages directement aux projets natifs est que les pages peuvent être étendues avec des vues natives. Les vues natives peuvent ensuite être nommées en XAML avec x:Name
et référencées à partir du code-behind. Pour plus d’informations sur les vues natives, consultez Vues natives.
Le processus de consommation d’une Xamarin.FormsContentPage
page dérivée dans un projet natif est le suivant :
- Ajoutez le Xamarin.Forms package NuGet au projet natif.
- Ajoutez la
ContentPage
page dérivée et toutes les dépendances au projet natif. - Appelez la méthode
Forms.Init
. - Créez une instance de la
ContentPage
page dérivée et convertissez-la en type natif approprié à l’aide de l’une des méthodes d’extension suivantes :CreateViewController
pour iOS,CreateSupportFragment
pour Android ouCreateFrameworkElement
pour UWP. - Accédez à la représentation de type native de la page dérivée à l’aide
ContentPage
de l’API de navigation native.
Xamarin.Forms doit être initialisé en appelant la Forms.Init
méthode avant qu’un projet natif puisse construire une ContentPage
page dérivée. Le choix du moment où effectuer cette opération dépend principalement du moment le plus pratique dans votre flux d’application: il peut être effectué au démarrage de l’application, ou juste avant la construction de la ContentPage
page dérivée. Dans cet article et dans les exemples d’applications qui l’accompagnent, la Forms.Init
méthode est appelée au démarrage de l’application.
Notes
L’exemple de solution d’application NativeForms ne contient aucun Xamarin.Forms projet. Au lieu de cela, il se compose d’un projet Xamarin.iOS, d’un projet Xamarin.Android et d’un projet UWP. Chaque projet est un projet natif qui utilise Native Forms pour consommer des ContentPage
pages dérivées. Toutefois, il n’y a pas de raison pour que les projets natifs n’utilisent ContentPage
pas les pages dérivées d’un projet de bibliothèque .NET Standard ou d’un projet partagé.
Lorsque vous utilisez Native Forms, Xamarin.Forms des fonctionnalités telles que DependencyService
, MessagingCenter
et le moteur de liaison de données fonctionnent toujours. Toutefois, la navigation de page doit être effectuée à l’aide de l’API de navigation native.
iOS
Sur iOS, le FinishedLaunching
remplacement dans la AppDelegate
classe est généralement l’endroit où effectuer des tâches liées au démarrage de l’application. Il est appelé après le lancement de l’application et est généralement remplacé pour configurer la fenêtre main et le contrôleur d’affichage. L’exemple de code suivant montre la AppDelegate
classe dans l’exemple d’application :
[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
public static AppDelegate Instance;
UIWindow _window;
AppNavigationController _navigation;
public static string FolderPath { get; private set; }
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
Forms.Init();
// Create app-level resource dictionary.
Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
Xamarin.Forms.Application.Current.Resources = new MyDictionary();
Instance = this;
_window = new UIWindow(UIScreen.MainScreen.Bounds);
UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes
{
TextColor = UIColor.Black
});
FolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
NotesPage notesPage = new NotesPage()
{
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
UIViewController notesPageController = notesPage.CreateViewController();
notesPageController.Title = "Notes";
_navigation = new AppNavigationController(notesPageController);
_window.RootViewController = _navigation;
_window.MakeKeyAndVisible();
notesPage.Parent = null;
return true;
}
// ...
}
La méthode FinishedLaunching
effectue les tâches suivantes :
- Xamarin.Forms est initialisé en appelant la
Forms.Init
méthode . - Un nouvel
Xamarin.Forms.Application
objet est créé et son dictionnaire de ressources au niveau de l’application est défini sur unResourceDictionary
défini en XAML. - Une référence à la
AppDelegate
classe est stockée dans lestatic
Instance
champ . Il s’agit de fournir un mécanisme permettant à d’autres classes d’appeler des méthodes définies dans laAppDelegate
classe . - ,
UIWindow
qui est le conteneur main pour les vues dans les applications iOS natives, est créé. - La
FolderPath
propriété est initialisée dans un chemin d’accès sur l’appareil où les données de note seront stockées. - Un
NotesPage
objet est créé, qui est une Xamarin.FormsContentPage
page dérivée définie en XAML, et son parent est défini sur l’objet créé précédemmentXamarin.Forms.Application
. - L’objet
NotesPage
est converti en unUIViewController
à l’aide de la méthode d’extensionCreateViewController
. - La
Title
propriété de estUIViewController
définie, qui sera affichée sur leUINavigationBar
. - Un
AppNavigationController
est créé pour la gestion de la navigation hiérarchique. Il s’agit d’une classe de contrôleur de navigation personnalisée, qui dérive deUINavigationController
. L’objetAppNavigationController
gère une pile de contrôleurs d’affichage, et leUIViewController
passé dans le constructeur est présenté initialement lorsque leAppNavigationController
est chargé. - L’objet
AppNavigationController
est défini en tant que niveauUIViewController
supérieur pour leUIWindow
, et leUIWindow
est défini comme fenêtre de clé pour l’application et est rendu visible. - La
Parent
propriété de l’objetNotesPage
est définie surnull
, pour empêcher une fuite de mémoire.
Une fois la FinishedLaunching
méthode exécutée, l’interface utilisateur définie dans la Xamarin.FormsNotesPage
classe s’affiche, comme illustré dans la capture d’écran suivante :
Important
Toutes les ContentPage
pages dérivées peuvent consommer des ressources définies au niveau ResourceDictionary
de l’application , à condition que la Parent
propriété de la page soit définie sur l’objet Application
.
L’interaction avec l’interface utilisateur, par exemple en appuyant sur , +Button
entraîne l’exécution du gestionnaire d’événements suivant dans le NotesPage
code-behind :
void OnNoteAddedClicked(object sender, EventArgs e)
{
AppDelegate.Instance.NavigateToNoteEntryPage(new Note());
}
Le static
AppDelegate.Instance
champ permet d’appeler la AppDelegate.NavigateToNoteEntryPage
méthode, ce qui est illustré dans l’exemple de code suivant :
public void NavigateToNoteEntryPage(Note note)
{
NoteEntryPage noteEntryPage = new NoteEntryPage
{
BindingContext = note,
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
var noteEntryViewController = noteEntryPage.CreateViewController();
noteEntryViewController.Title = "Note Entry";
_navigation.PushViewController(noteEntryViewController, true);
noteEntryPage.Parent = null;
}
La NavigateToNoteEntryPage
méthode convertit laContentPage
Xamarin.Forms page dérivée en un avec la CreateViewController
méthode d’extension UIViewController
et définit la Title
propriété du UIViewController
. Le UIViewController
est ensuite poussé AppNavigationController
par la PushViewController
méthode. Par conséquent, l’interface utilisateur définie dans la Xamarin.FormsNoteEntryPage
classe s’affiche, comme illustré dans la capture d’écran suivante :
Lorsque le NoteEntryPage
est affiché, la navigation arrière affiche le UIViewController
pour la NoteEntryPage
classe à partir de , AppNavigationController
renvoyant l’utilisateur au UIViewController
pour la NotesPage
classe . Toutefois, l’extraction d’un UIViewController
à partir de la pile de navigation native iOS ne élimine pas automatiquement l’objet UIViewController
et attaché Page
. Par conséquent, la AppNavigationController
classe remplace la PopViewController
méthode, pour supprimer les contrôleurs d’affichage sur la navigation descendante :
public class AppNavigationController : UINavigationController
{
//...
public override UIViewController PopViewController(bool animated)
{
UIViewController topView = TopViewController;
if (topView != null)
{
// Dispose of ViewController on back navigation.
topView.Dispose();
}
return base.PopViewController(animated);
}
}
Le PopViewController
remplacement appelle la Dispose
méthode sur l’objet UIViewController
qui a été extrait de la pile de navigation native iOS. Si vous ne le faites pas, l’objet UIViewController
joint et Page
est orphelin.
Important
Les objets orphelins ne peuvent pas être collectés à la mémoire, ce qui entraîne une fuite de mémoire.
Android
Sur Android, la OnCreate
substitution dans la MainActivity
classe est généralement l’endroit où effectuer des tâches liées au démarrage de l’application. L’exemple de code suivant montre la MainActivity
classe dans l’exemple d’application :
public class MainActivity : AppCompatActivity
{
public static string FolderPath { get; private set; }
public static MainActivity Instance;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Forms.Init(this, bundle);
// Create app-level resource dictionary.
Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
Xamarin.Forms.Application.Current.Resources = new MyDictionary();
Instance = this;
SetContentView(Resource.Layout.Main);
var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
SupportActionBar.Title = "Notes";
FolderPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData));
NotesPage notesPage = new NotesPage()
{
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
AndroidX.Fragment.App.Fragment notesPageFragment = notesPage.CreateSupportFragment(this);
SupportFragmentManager
.BeginTransaction()
.Replace(Resource.Id.fragment_frame_layout, mainPage)
.Commit();
//...
notesPage.Parent = null;
}
...
}
La méthode OnCreate
effectue les tâches suivantes :
- Xamarin.Forms est initialisé en appelant la
Forms.Init
méthode . - Un nouvel
Xamarin.Forms.Application
objet est créé et son dictionnaire de ressources au niveau de l’application est défini sur unResourceDictionary
défini en XAML. - Une référence à la
MainActivity
classe est stockée dans lestatic
Instance
champ . Il s’agit de fournir un mécanisme permettant à d’autres classes d’appeler des méthodes définies dans laMainActivity
classe . - Le
Activity
contenu est défini à partir d’une ressource de disposition. Dans l’exemple d’application, la disposition se compose d’unLinearLayout
qui contient unToolbar
et d’unFrameLayout
pour agir comme un conteneur de fragments. - est
Toolbar
récupéré et défini comme barre d’actions pour leActivity
, et le titre de la barre d’action est défini. - La
FolderPath
propriété est initialisée dans un chemin d’accès sur l’appareil où les données de note seront stockées. - Un
NotesPage
objet est créé, qui est une Xamarin.FormsContentPage
page dérivée définie en XAML, et son parent est défini sur l’objet créé précédemmentXamarin.Forms.Application
. - L’objet
NotesPage
est converti en unFragment
à l’aide de la méthode d’extensionCreateSupportFragment
. - La
SupportFragmentManager
classe crée et valide une transaction qui remplace leFrameLayout
instance par leFragment
pour laNotesPage
classe . - La
Parent
propriété de l’objetNotesPage
est définie surnull
, pour empêcher une fuite de mémoire.
Pour plus d’informations sur les fragments, consultez Fragments.
Une fois la OnCreate
méthode exécutée, l’interface utilisateur définie dans la Xamarin.FormsNotesPage
classe s’affiche, comme illustré dans la capture d’écran suivante :
Important
Toutes les ContentPage
pages dérivées peuvent consommer des ressources définies au niveau ResourceDictionary
de l’application , à condition que la Parent
propriété de la page soit définie sur l’objet Application
.
L’interaction avec l’interface utilisateur, par exemple en appuyant sur , +Button
entraîne l’exécution du gestionnaire d’événements suivant dans le NotesPage
code-behind :
void OnNoteAddedClicked(object sender, EventArgs e)
{
MainActivity.Instance.NavigateToNoteEntryPage(new Note());
}
Le static
MainActivity.Instance
champ permet d’appeler la MainActivity.NavigateToNoteEntryPage
méthode, ce qui est illustré dans l’exemple de code suivant :
public void NavigateToNoteEntryPage(Note note)
{
NoteEntryPage noteEntryPage = new NoteEntryPage
{
BindingContext = note,
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
AndroidX.Fragment.App.Fragment noteEntryFragment = noteEntryPage.CreateSupportFragment(this);
SupportFragmentManager
.BeginTransaction()
.AddToBackStack(null)
.Replace(Resource.Id.fragment_frame_layout, noteEntryFragment)
.Commit();
noteEntryPage.Parent = null;
}
La NavigateToNoteEntryPage
méthode convertit la Xamarin.FormsContentPage
page dérivée en un avec la méthode d’extension Fragment
CreateSupportFragment
et ajoute le Fragment
à la pile arrière des fragments. Par conséquent, l’interface utilisateur définie dans s’affiche Xamarin.FormsNoteEntryPage
, comme illustré dans la capture d’écran suivante :
Lorsque le NoteEntryPage
est affiché, appuyez sur la flèche arrière pour faire apparaître le Fragment
pour à NoteEntryPage
partir de la pile arrière des fragments, renvoyant l’utilisateur à pour Fragment
la NotesPage
classe.
Activer la prise en charge de la navigation arrière
La SupportFragmentManager
classe a un BackStackChanged
événement qui se déclenche chaque fois que le contenu de la pile arrière des fragments change. La OnCreate
méthode de la MainActivity
classe contient un gestionnaire d’événements anonyme pour cet événement :
SupportFragmentManager.BackStackChanged += (sender, e) =>
{
bool hasBack = SupportFragmentManager.BackStackEntryCount > 0;
SupportActionBar.SetHomeButtonEnabled(hasBack);
SupportActionBar.SetDisplayHomeAsUpEnabled(hasBack);
SupportActionBar.Title = hasBack ? "Note Entry" : "Notes";
};
Ce gestionnaire d’événements affiche un bouton Précédent dans la barre d’actions, à condition qu’il y ait une ou plusieurs Fragment
instances sur la pile arrière des fragments. La réponse à l’appui du bouton Précédent est gérée par le OnOptionsItemSelected
remplacement :
public override bool OnOptionsItemSelected(Android.Views.IMenuItem item)
{
if (item.ItemId == global::Android.Resource.Id.Home && SupportFragmentManager.BackStackEntryCount > 0)
{
SupportFragmentManager.PopBackStack();
return true;
}
return base.OnOptionsItemSelected(item);
}
Le OnOptionsItemSelected
remplacement est appelé chaque fois qu’un élément du menu options est sélectionné. Cette implémentation extrait le fragment actuel de la pile arrière des fragments, à condition que le bouton Précédent ait été sélectionné et qu’il y ait une ou plusieurs Fragment
instances sur la pile arrière des fragments.
Activités multiples
Lorsqu’une application est composée de plusieurs activités, ContentPage
des pages dérivées peuvent être incorporées dans chacune des activités. Dans ce scénario, la Forms.Init
méthode doit être appelée uniquement dans le OnCreate
remplacement de la première Activity
qui incorpore un Xamarin.FormsContentPage
. Toutefois, cela a l’impact suivant :
- La valeur de
Xamarin.Forms.Color.Accent
sera extraite duActivity
qui a appelé laForms.Init
méthode. - La valeur de
Xamarin.Forms.Application.Current
sera associéeActivity
au qui a appelé laForms.Init
méthode .
Choisir un fichier
Lors de l’incorporation d’une ContentPage
page dérivée qui utilise un WebView
qui doit prendre en charge un bouton HTML « Choisir un fichier », le Activity
doit remplacer la OnActivityResult
méthode :
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
ActivityResultCallbackRegistry.InvokeCallback(requestCode, resultCode, data);
}
UWP
Sur UWP, la classe native App
est généralement l’endroit où effectuer des tâches liées au démarrage de l’application. Xamarin.Forms est généralement initialisé, dans Xamarin.Forms les applications UWP, dans la OnLaunched
substitution dans la classe native App
, pour passer l’argument LaunchActivatedEventArgs
à la Forms.Init
méthode . Pour cette raison, les applications UWP natives qui utilisent une Xamarin.FormsContentPage
page dérivée peuvent plus facilement appeler la Forms.Init
méthode à partir de la App.OnLaunched
méthode :
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
// ...
Xamarin.Forms.Forms.Init(e);
// Create app-level resource dictionary.
Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
Xamarin.Forms.Application.Current.Resources = new MyDictionary();
// ...
}
En outre, la OnLaunched
méthode peut également créer n’importe quel dictionnaire de ressources au niveau de l’application requis par l’application.
Par défaut, la classe native App
lance la MainPage
classe en tant que première page de l’application. L’exemple de code suivant montre la MainPage
classe dans l’exemple d’application :
public sealed partial class MainPage : Page
{
NotesPage notesPage;
NoteEntryPage noteEntryPage;
public static MainPage Instance;
public static string FolderPath { get; private set; }
public MainPage()
{
this.NavigationCacheMode = NavigationCacheMode.Enabled;
Instance = this;
FolderPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData));
notesPage = new Notes.UWP.Views.NotesPage
{
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
this.Content = notesPage.CreateFrameworkElement();
// ...
notesPage.Parent = null;
}
// ...
}
Le MainPage
constructeur effectue les tâches suivantes :
- La mise en cache est activée pour la page, de sorte qu’aucune nouvelle
MainPage
n’est construite lorsqu’un utilisateur revient à la page. - Une référence à la
MainPage
classe est stockée dans lestatic
Instance
champ . Il s’agit de fournir un mécanisme permettant à d’autres classes d’appeler des méthodes définies dans laMainPage
classe . - La
FolderPath
propriété est initialisée vers un chemin d’accès sur l’appareil où les données de note seront stockées. - Un
NotesPage
objet est créé, qui est une Xamarin.FormsContentPage
page dérivée définie en XAML, et son parent est défini sur l’objet crééXamarin.Forms.Application
précédemment. - L’objet
NotesPage
est converti en unFrameworkElement
à l’aide de laCreateFrameworkElement
méthode d’extension, puis défini comme contenu de laMainPage
classe . - La
Parent
propriété de l’objetNotesPage
est définie surnull
, pour empêcher une fuite de mémoire.
Une fois le MainPage
constructeur exécuté, l’interface utilisateur définie dans la Xamarin.FormsNotesPage
classe s’affiche, comme illustré dans la capture d’écran suivante :
Important
Toutes les ContentPage
pages dérivées peuvent consommer des ressources définies au niveau ResourceDictionary
de l’application , à condition que la Parent
propriété de la page soit définie sur l’objet Application
.
L’interaction avec l’interface utilisateur, par exemple en appuyant sur , +Button
entraîne l’exécution du gestionnaire d’événements suivant dans le NotesPage
code-behind :
void OnNoteAddedClicked(object sender, EventArgs e)
{
MainPage.Instance.NavigateToNoteEntryPage(new Note());
}
Le static
MainPage.Instance
champ permet d’appeler la MainPage.NavigateToNoteEntryPage
méthode, ce qui est illustré dans l’exemple de code suivant :
public void NavigateToNoteEntryPage(Note note)
{
noteEntryPage = new Notes.UWP.Views.NoteEntryPage
{
BindingContext = note,
// Set the parent so that the app-level resource dictionary can be located.
Parent = Xamarin.Forms.Application.Current
};
this.Frame.Navigate(noteEntryPage);
noteEntryPage.Parent = null;
}
La navigation dans UWP est généralement effectuée avec la Frame.Navigate
méthode , qui prend un Page
argument . Xamarin.Formsdéfinit une méthode d’extension Frame.Navigate
qui prend une ContentPage
instance de page dérivée. Par conséquent, lorsque la NavigateToNoteEntryPage
méthode s’exécute, l’interface utilisateur définie dans s’affiche Xamarin.FormsNoteEntryPage
, comme illustré dans la capture d’écran suivante :
Lorsque le NoteEntryPage
est affiché, appuyez sur la flèche Précédent pour faire apparaître le FrameworkElement
pour à NoteEntryPage
partir de la pile arrière dans l’application, ce qui renvoie l’utilisateur à la FrameworkElement
classe NotesPage
.
Activer la prise en charge du redimensionnement des pages
Lorsque la fenêtre d’application UWP est redimensionnée, le Xamarin.Forms contenu doit également être redimensionné. Pour ce faire, inscrivez un gestionnaire d’événements pour l’événement Loaded
, dans le MainPage
constructeur :
public MainPage()
{
// ...
this.Loaded += OnMainPageLoaded;
// ...
}
L’événement Loaded
se déclenche lorsque la page est disposée, rendue et prête pour l’interaction, et exécute la OnMainPageLoaded
méthode en réponse :
void OnMainPageLoaded(object sender, RoutedEventArgs e)
{
this.Frame.SizeChanged += (o, args) =>
{
if (noteEntryPage != null)
noteEntryPage.Layout(new Xamarin.Forms.Rectangle(0, 0, args.NewSize.Width, args.NewSize.Height));
else
notesPage.Layout(new Xamarin.Forms.Rectangle(0, 0, args.NewSize.Width, args.NewSize.Height));
};
}
La OnMainPageLoaded
méthode enregistre un gestionnaire d’événements anonyme pour l’événement Frame.SizeChanged
, qui est déclenché lorsque les ActualHeight
propriétés ou changent ActualWidth
sur le Frame
. En réponse, le Xamarin.Forms contenu de la page active est redimensionné en appelant la Layout
méthode .
Activer la prise en charge de la navigation vers l’arrière
Sur UWP, les applications doivent activer la navigation arrière pour tous les boutons précédents matériels et logiciels, sur différents facteurs de forme d’appareil. Pour ce faire, inscrivez un gestionnaire d’événements pour l’événement BackRequested
, qui peut être effectué dans le MainPage
constructeur :
public MainPage()
{
// ...
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
}
Lorsque l’application est lancée, la GetForCurrentView
méthode récupère l’objet SystemNavigationManager
associé à l’affichage actuel, puis inscrit un gestionnaire d’événements pour l’événement BackRequested
. L’application ne reçoit cet événement que s’il s’agit de l’application de premier plan et, en réponse, appelle le gestionnaire d’événements OnBackRequested
:
void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
{
e.Handled = true;
rootFrame.GoBack();
noteEntryPage = null;
}
}
Le OnBackRequested
gestionnaire d’événements appelle la GoBack
méthode sur le frame racine de l’application et définit la BackRequestedEventArgs.Handled
propriété sur true
pour marquer l’événement comme étant géré. Si vous ne marquez pas l’événement comme géré, l’événement peut être ignoré.
L’application choisit d’afficher un bouton Précédent dans la barre de titre. Pour ce faire, définissez la AppViewBackButtonVisibility
propriété sur l’une AppViewBackButtonVisibility
des valeurs d’énumération, dans la App
classe :
void OnNavigated(object sender, NavigationEventArgs e)
{
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
((Frame)sender).CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;
}
Le OnNavigated
gestionnaire d’événements, qui est exécuté en réponse au déclenchement de l’événement Navigated
, met à jour la visibilité du bouton Précédent de la barre de titre lorsque la navigation sur la page se produit. Cela garantit que le bouton Précédent de la barre de titre est visible si la pile arrière dans l’application n’est pas vide, ou supprimé de la barre de titre si la pile arrière dans l’application est vide.
Pour plus d’informations sur la prise en charge de la navigation arrière sur UWP, consultez Historique de navigation et navigation vers l’arrière pour les applications UWP.