Xamarin.Forms nei progetti nativi di Xamarin
In genere, un'applicazione Xamarin.Forms include una o più pagine che derivano da ContentPage
e queste pagine vengono condivise da tutte le piattaforme in un progetto di libreria .NET Standard o progetto condiviso. Tuttavia, Native Forms consente l'aggiunta ContentPage
di pagine derivate direttamente alle applicazioni Xamarin.iOS, Xamarin.Android e UWP native. Rispetto al fatto che il progetto nativo utilizza ContentPage
pagine derivate da un progetto di libreria .NET Standard o progetto condiviso, il vantaggio di aggiungere pagine direttamente ai progetti nativi è che le pagine possono essere estese con visualizzazioni native. Le visualizzazioni native possono quindi essere denominate in XAML con x:Name
e a cui viene fatto riferimento dal code-behind. Per altre informazioni sulle viste native, vedere Viste native.
Il processo per l'utilizzo di una Xamarin.FormsContentPage
pagina derivata da -in un progetto nativo è il seguente:
- Aggiungere il Xamarin.Forms pacchetto NuGet al progetto nativo.
- Aggiungere la
ContentPage
pagina derivata da e tutte le dipendenze al progetto nativo. - Chiamare il metodo
Forms.Init
. - Creare un'istanza della
ContentPage
pagina derivata da e convertirla nel tipo nativo appropriato usando uno dei metodi di estensione seguenti:CreateViewController
per iOS,CreateSupportFragment
per Android oCreateFrameworkElement
per UWP. - Passare alla rappresentazione del tipo nativo della
ContentPage
pagina derivata tramite l'API di spostamento nativa.
Xamarin.Forms deve essere inizializzato chiamando il Forms.Init
metodo prima che un progetto nativo possa costruire una ContentPage
pagina derivata da . La scelta di quando eseguire questa operazione dipende principalmente dal momento in cui è più conveniente nel flusso dell'applicazione, che può essere eseguita all'avvio dell'applicazione o subito prima che venga costruita la ContentPage
pagina derivata da . In questo articolo e nelle applicazioni di esempio abbinate viene chiamato il Forms.Init
metodo all'avvio dell'applicazione.
Nota
La soluzione dell'applicazione di esempio NativeForms non contiene progetti Xamarin.Forms . È invece costituito da un progetto Xamarin.iOS, un progetto Xamarin.Android e un progetto UWP. Ogni progetto è un progetto nativo che usa moduli nativi per utilizzare ContentPage
pagine derivate da . Tuttavia, non c'è motivo per cui i progetti nativi non potevano utilizzare ContentPage
pagine derivate da un progetto di libreria .NET Standard o un progetto condiviso.
Quando si usano moduli nativi, Xamarin.Forms tutte le funzionalità come DependencyService
, MessagingCenter
e il motore di data binding funzionano ancora. Tuttavia, lo spostamento tra le pagine deve essere eseguito usando l'API di spostamento nativa.
iOS
In iOS, l'override FinishedLaunching
nella AppDelegate
classe è in genere la posizione in cui eseguire attività correlate all'avvio dell'applicazione. Viene chiamato dopo l'avvio dell'applicazione ed è in genere sottoposto a override per configurare la finestra principale e il controller di visualizzazione. L'esempio di codice seguente illustra la AppDelegate
classe nell'applicazione di esempio:
[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;
}
// ...
}
Il metodo FinishedLaunching
esegue le attività seguenti:
- Xamarin.Forms viene inizializzato chiamando il
Forms.Init
metodo . - Viene creato un nuovo
Xamarin.Forms.Application
oggetto e il relativo dizionario risorse a livello di applicazione è impostato su unResourceDictionary
oggetto definito in XAML. - Un riferimento alla
AppDelegate
classe viene archiviato nelstatic
Instance
campo . Si tratta di fornire un meccanismo per altre classi per chiamare i metodi definiti nellaAppDelegate
classe . - Viene
UIWindow
creato il contenitore principale per le visualizzazioni nelle applicazioni iOS native. - La
FolderPath
proprietà viene inizializzata in un percorso nel dispositivo in cui verranno archiviati i dati delle note. - Viene creato un
NotesPage
oggetto, ovvero una Xamarin.FormsContentPage
pagina derivata da -definita in XAML e il relativo elemento padre viene impostato sull'oggetto creatoXamarin.Forms.Application
in precedenza. - L'oggetto
NotesPage
viene convertito in unUIViewController
oggetto utilizzando ilCreateViewController
metodo di estensione. - La
Title
proprietà diUIViewController
è impostata, che verrà visualizzata nell'oggettoUINavigationBar
. - Viene creato un
AppNavigationController
oggetto per la gestione della navigazione gerarchica. Si tratta di una classe controller di spostamento personalizzata, che deriva daUINavigationController
. L'oggettoAppNavigationController
gestisce uno stack di controller di visualizzazione e l'oggettoUIViewController
passato al costruttore verrà presentato inizialmente quandoAppNavigationController
viene caricato . - L'oggetto
AppNavigationController
viene impostato come primo livelloUIViewController
perUIWindow
eUIWindow
viene impostato come finestra chiave per l'applicazione e viene reso visibile. - La
Parent
proprietà dell'oggettoNotesPage
è impostata sunull
per evitare una perdita di memoria.
Dopo l'esecuzione del FinishedLaunching
metodo, verrà visualizzata l'interfaccia utente definita nella Xamarin.FormsNotesPage
classe , come illustrato nello screenshot seguente:
Importante
Tutte le ContentPage
pagine derivate da possono utilizzare risorse definite a livello ResourceDictionary
di applicazione, a condizione che la Parent
proprietà della pagina sia impostata sull'oggetto Application
.
L'interazione con l'interfaccia utente, ad esempio toccando su + Button
, comporterà l'esecuzione del NotesPage
gestore eventi seguente nel code-behind:
void OnNoteAddedClicked(object sender, EventArgs e)
{
AppDelegate.Instance.NavigateToNoteEntryPage(new Note());
}
Il static
AppDelegate.Instance
campo consente di richiamare il AppDelegate.NavigateToNoteEntryPage
metodo , illustrato nell'esempio di codice seguente:
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;
}
Il NavigateToNoteEntryPage
metodo converte la Xamarin.FormsContentPage
pagina derivata da in un UIViewController
oggetto con il CreateViewController
metodo di estensione e imposta la Title
proprietà dell'oggetto UIViewController
. l'oggetto UIViewController
viene quindi inserito AppNavigationController
dal PushViewController
metodo . Pertanto, l'interfaccia utente definita nella Xamarin.FormsNoteEntryPage
classe verrà visualizzata, come illustrato nello screenshot seguente:
NoteEntryPage
Quando viene visualizzato , lo spostamento indietro aprirà per UIViewController
la NoteEntryPage
classe da AppNavigationController
, restituendo l'utente a UIViewController
per la NotesPage
classe . Tuttavia, l'estrazione di un UIViewController
oggetto dallo stack di spostamento nativo iOS non elimina automaticamente l'oggetto UIViewController
associato e .Page
Pertanto, la classe esegue l'override AppNavigationController
del PopViewController
metodo per eliminare i controller di visualizzazione sullo spostamento indietro:
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);
}
}
L'override PopViewController
chiama il Dispose
metodo sull'oggetto UIViewController
estratto dallo stack di navigazione nativo iOS. Se non si esegue questa operazione, l'oggetto UIViewController
collegato e sarà orfano Page
.
Importante
Gli oggetti orfani non possono essere sottoposto a Garbage Collection e quindi comportano una perdita di memoria.
Android
In Android, l'override OnCreate
nella MainActivity
classe è in genere la posizione in cui eseguire le attività correlate all'avvio dell'applicazione. L'esempio di codice seguente illustra la MainActivity
classe nell'applicazione di esempio:
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;
}
...
}
Il metodo OnCreate
esegue le attività seguenti:
- Xamarin.Forms viene inizializzato chiamando il
Forms.Init
metodo . - Viene creato un nuovo
Xamarin.Forms.Application
oggetto e il relativo dizionario risorse a livello di applicazione è impostato su unResourceDictionary
oggetto definito in XAML. - Un riferimento alla
MainActivity
classe viene archiviato nelstatic
Instance
campo . Si tratta di fornire un meccanismo per altre classi per chiamare i metodi definiti nellaMainActivity
classe . - Il
Activity
contenuto viene impostato da una risorsa di layout. Nell'applicazione di esempio il layout è costituito da unLinearLayout
che contiene unToolbar
e un oggettoFrameLayout
da usare come contenitore di frammenti. - Viene
Toolbar
recuperato e impostato come barra delle azioni perActivity
e il titolo della barra delle azioni è impostato. - La
FolderPath
proprietà viene inizializzata in un percorso nel dispositivo in cui verranno archiviati i dati delle note. - Viene creato un
NotesPage
oggetto, ovvero una Xamarin.FormsContentPage
pagina derivata da -definita in XAML e il relativo elemento padre viene impostato sull'oggetto creatoXamarin.Forms.Application
in precedenza. - L'oggetto
NotesPage
viene convertito in unFragment
oggetto utilizzando ilCreateSupportFragment
metodo di estensione. - La
SupportFragmentManager
classe crea ed esegue il commit di una transazione che sostituisce l'istanzaFrameLayout
con perFragment
laNotesPage
classe . - La
Parent
proprietà dell'oggettoNotesPage
è impostata sunull
per evitare una perdita di memoria.
Per altre informazioni sui frammenti, vedere Frammenti.
Dopo l'esecuzione del OnCreate
metodo, verrà visualizzata l'interfaccia utente definita nella Xamarin.FormsNotesPage
classe , come illustrato nello screenshot seguente:
Importante
Tutte le ContentPage
pagine derivate da possono utilizzare risorse definite a livello ResourceDictionary
di applicazione, a condizione che la Parent
proprietà della pagina sia impostata sull'oggetto Application
.
L'interazione con l'interfaccia utente, ad esempio toccando su + Button
, comporterà l'esecuzione del NotesPage
gestore eventi seguente nel code-behind:
void OnNoteAddedClicked(object sender, EventArgs e)
{
MainActivity.Instance.NavigateToNoteEntryPage(new Note());
}
Il static
MainActivity.Instance
campo consente di richiamare il MainActivity.NavigateToNoteEntryPage
metodo , illustrato nell'esempio di codice seguente:
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;
}
Il NavigateToNoteEntryPage
metodo converte la Xamarin.FormsContentPage
pagina derivata da in un Fragment
oggetto con il CreateSupportFragment
metodo di estensione e aggiunge l'oggetto Fragment
allo stack back del frammento. Di conseguenza, l'interfaccia utente definita in Xamarin.FormsNoteEntryPage
verrà visualizzata, come illustrato nello screenshot seguente:
Quando l'oggetto NoteEntryPage
viene visualizzato, toccando la freccia indietro si aprirà Fragment
per l'oggetto NoteEntryPage
dallo stack indietro del frammento, restituendo l'utente all'oggetto Fragment
per la NotesPage
classe .
Abilitare il supporto per lo spostamento indietro
La SupportFragmentManager
classe ha un BackStackChanged
evento che viene generato ogni volta che cambia il contenuto dello stack back del frammento. Il OnCreate
metodo nella MainActivity
classe contiene un gestore eventi anonimo per questo evento:
SupportFragmentManager.BackStackChanged += (sender, e) =>
{
bool hasBack = SupportFragmentManager.BackStackEntryCount > 0;
SupportActionBar.SetHomeButtonEnabled(hasBack);
SupportActionBar.SetDisplayHomeAsUpEnabled(hasBack);
SupportActionBar.Title = hasBack ? "Note Entry" : "Notes";
};
Questo gestore eventi visualizza un pulsante Indietro sulla barra delle azioni a condizione che siano presenti una o più Fragment
istanze nello stack back del frammento. La risposta a toccare il pulsante Indietro viene gestita dall'override OnOptionsItemSelected
:
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);
}
L'override OnOptionsItemSelected
viene chiamato ogni volta che viene selezionata una voce nel menu delle opzioni. Questa implementazione popa il frammento corrente dallo stack back del frammento, a condizione che il pulsante Indietro sia stato selezionato e che siano presenti una o più Fragment
istanze nello stack back del frammento.
Più attività
Quando un'applicazione è composta da più attività, ContentPage
le pagine derivate da possono essere incorporate in ognuna delle attività. In questo scenario, il Forms.Init
metodo deve essere chiamato solo nell'override OnCreate
del primo Activity
oggetto che incorpora un oggetto Xamarin.FormsContentPage
. Tuttavia, questo ha l'impatto seguente:
- Il valore di
Xamarin.Forms.Color.Accent
verrà ricavato dall'oggettoActivity
che ha chiamato ilForms.Init
metodo . - Il valore di
Xamarin.Forms.Application.Current
verrà associato all'oggettoActivity
che ha chiamato ilForms.Init
metodo .
Scegli un file
Quando si incorpora una ContentPage
pagina derivata da che usa un oggetto WebView
che deve supportare un pulsante HTML "Choose File", è necessario eseguire l'override Activity
del OnActivityResult
metodo :
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
ActivityResultCallbackRegistry.InvokeCallback(requestCode, resultCode, data);
}
UWP
Nella piattaforma UWP la classe nativa App
è in genere la posizione in cui eseguire attività correlate all'avvio dell'applicazione. Xamarin.Forms viene in genere inizializzato, nelle Xamarin.Forms applicazioni UWP, nell'override OnLaunched
nella classe nativa App
, per passare l'argomento LaunchActivatedEventArgs
al Forms.Init
metodo . Per questo motivo, le applicazioni UWP native che usano una Xamarin.FormsContentPage
pagina derivata da possono chiamare più facilmente il Forms.Init
metodo dal App.OnLaunched
metodo :
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();
// ...
}
Inoltre, il OnLaunched
metodo può anche creare qualsiasi dizionario risorse a livello di applicazione richiesto dall'applicazione.
Per impostazione predefinita, la classe nativa App
avvia la MainPage
classe come prima pagina dell'applicazione. L'esempio di codice seguente illustra la MainPage
classe nell'applicazione di esempio:
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;
}
// ...
}
Il MainPage
costruttore esegue le attività seguenti:
- La memorizzazione nella cache è abilitata per la pagina, in modo che un nuovo
MainPage
non venga costruito quando un utente torna alla pagina. - Un riferimento alla
MainPage
classe viene archiviato nelstatic
Instance
campo . Si tratta di fornire un meccanismo per altre classi per chiamare i metodi definiti nellaMainPage
classe . - La
FolderPath
proprietà viene inizializzata in un percorso nel dispositivo in cui verranno archiviati i dati delle note. - Viene creato un
NotesPage
oggetto, ovvero una Xamarin.FormsContentPage
pagina derivata da -definita in XAML e il relativo elemento padre viene impostato sull'oggetto creatoXamarin.Forms.Application
in precedenza. - L'oggetto
NotesPage
viene convertito in unFrameworkElement
oggetto utilizzando ilCreateFrameworkElement
metodo di estensione e quindi impostato come contenuto dellaMainPage
classe . - La
Parent
proprietà dell'oggettoNotesPage
è impostata sunull
per evitare una perdita di memoria.
Dopo l'esecuzione del MainPage
costruttore, verrà visualizzata l'interfaccia utente definita nella Xamarin.FormsNotesPage
classe , come illustrato nello screenshot seguente:
Importante
Tutte le ContentPage
pagine derivate da possono utilizzare risorse definite a livello ResourceDictionary
di applicazione, a condizione che la Parent
proprietà della pagina sia impostata sull'oggetto Application
.
L'interazione con l'interfaccia utente, ad esempio toccando su + Button
, comporterà l'esecuzione del NotesPage
gestore eventi seguente nel code-behind:
void OnNoteAddedClicked(object sender, EventArgs e)
{
MainPage.Instance.NavigateToNoteEntryPage(new Note());
}
Il static
MainPage.Instance
campo consente di richiamare il MainPage.NavigateToNoteEntryPage
metodo , illustrato nell'esempio di codice seguente:
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;
}
Lo spostamento nella piattaforma UWP viene in genere eseguito con il Frame.Navigate
metodo , che accetta un Page
argomento. Xamarin.Forms definisce un metodo di Frame.Navigate
estensione che accetta un'istanza ContentPage
di pagina derivata da . Pertanto, quando il NavigateToNoteEntryPage
metodo viene eseguito, verrà visualizzata l'interfaccia utente definita in Xamarin.FormsNoteEntryPage
, come illustrato nello screenshot seguente:
Quando l'oggetto NoteEntryPage
viene visualizzato, toccando la freccia indietro si aprirà FrameworkElement
per l'oggetto NoteEntryPage
dallo stack back in-app, restituendo l'utente all'oggetto FrameworkElement
per la NotesPage
classe .
Abilitare il supporto per il ridimensionamento delle pagine
Quando la finestra dell'applicazione UWP viene ridimensionata, anche il Xamarin.Forms contenuto deve essere ridimensionato. Questa operazione viene eseguita registrando un gestore eventi per l'evento Loaded
, nel MainPage
costruttore :
public MainPage()
{
// ...
this.Loaded += OnMainPageLoaded;
// ...
}
L'evento Loaded
viene generato quando la pagina viene disposta, sottoposta a rendering e pronta per l'interazione ed esegue il OnMainPageLoaded
metodo in risposta:
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));
};
}
Il OnMainPageLoaded
metodo registra un gestore eventi anonimo per l'evento Frame.SizeChanged
, che viene generato quando le ActualHeight
proprietà o ActualWidth
cambiano in Frame
. In risposta, il Xamarin.Forms contenuto della pagina attiva viene ridimensionato chiamando il Layout
metodo .
Abilitare il supporto per lo spostamento indietro
Nella piattaforma UWP, le applicazioni devono abilitare lo spostamento indietro per tutti i pulsanti indietro hardware e software, in diversi fattori di forma del dispositivo. A tale scopo, è possibile registrare un gestore eventi per l'evento BackRequested
, che può essere eseguito nel MainPage
costruttore:
public MainPage()
{
// ...
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
}
Quando l'applicazione viene avviata, il GetForCurrentView
metodo recupera l'oggetto SystemNavigationManager
associato alla visualizzazione corrente, quindi registra un gestore eventi per l'evento BackRequested
. L'applicazione riceve questo evento solo se è l'applicazione in primo piano e in risposta chiama il OnBackRequested
gestore eventi:
void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
{
e.Handled = true;
rootFrame.GoBack();
noteEntryPage = null;
}
}
Il OnBackRequested
gestore eventi chiama il GoBack
metodo nel frame radice dell'applicazione e imposta la BackRequestedEventArgs.Handled
proprietà su per true
contrassegnare l'evento come gestito. Se non si contrassegna l'evento come gestito, l'evento potrebbe essere ignorato.
L'applicazione sceglie se visualizzare un pulsante Indietro sulla barra del titolo. Questa operazione viene ottenuta impostando la AppViewBackButtonVisibility
proprietà su uno dei AppViewBackButtonVisibility
valori di enumerazione, nella App
classe :
void OnNavigated(object sender, NavigationEventArgs e)
{
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
((Frame)sender).CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;
}
Il OnNavigated
gestore eventi, che viene eseguito in risposta alla generazione dell'evento Navigated
, aggiorna la visibilità del pulsante Indietro della barra del titolo quando si verifica lo spostamento nella pagina. In questo modo si garantisce che il pulsante Indietro della barra del titolo sia visibile se lo stack back in-app non è vuoto o rimosso dalla barra del titolo se lo stack back in-app è vuoto.
Per altre informazioni sul supporto dello spostamento indietro su UWP, vedi Cronologia di spostamento e spostamento indietro per le app UWP.