Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aiutare gli utenti a essere più produttivi consentendo loro di visualizzare parti indipendenti della tua app in finestre separate. Quando si creano più finestre per un'app, ogni finestra si comporta in modo indipendente. La barra delle applicazioni mostra ogni finestra separatamente. Gli utenti possono spostare, ridimensionare, mostrare e nascondere le finestre delle app in modo indipendente e passare da una finestra all'altra come se fossero app separate. Ogni finestra opera nel proprio thread.
API importanti: ApplicationViewSwitcher, CreateNewView
Che cos'è una vista?
Una visualizzazione dell'app è l'abbinamento 1:1 di un thread e di una finestra che l'app utilizza per mostrare il contenuto. È rappresentato da un oggetto Windows.ApplicationModel.Core.CoreApplicationView.
Le visualizzazioni sono gestite dall'oggetto CoreApplication . Si utilizza CoreApplication.CreateNewView per creare un oggetto CoreApplicationView. Il CoreApplicationView riunisce un CoreWindow e un CoreDispatcher (memorizzato nelle proprietà CoreWindow e Dispatcher). Puoi pensare al CoreApplicationView come oggetto usato da Windows Runtime per interagire con il sistema Windows principale.
Di solito non si lavora direttamente con CoreApplicationView . Windows Runtime fornisce invece la classe ApplicationView nello spazio dei nomi Windows.UI.ViewManagement. Questa classe fornisce proprietà, metodi ed eventi che usi quando l'app interagisce con il sistema di windowing. Per usare un
Analogamente, il framework XAML esegue il wrapping dell'oggetto CoreWindow in un oggetto Windows.UI.XAML.Window. In un'app XAML, si interagisce tipicamente con l'oggetto Window anziché lavorare direttamente con CoreWindow.
Mostra una nuova visualizzazione
Anche se ogni layout dell'app è univoco, è consigliabile includere un pulsante "nuova finestra" in una posizione prevedibile, ad esempio l'angolo superiore destro del contenuto che può essere aperto in una nuova finestra. Prendere in considerazione anche l'inclusione di un'opzione di menu contestuale per "Apri in una nuova finestra".
Verranno ora esaminati i passaggi per creare una nuova visualizzazione. In questo caso, la nuova visualizzazione viene avviata in risposta a un clic del pulsante.
private async void Button_Click(object sender, RoutedEventArgs e)
{
CoreApplicationView newView = CoreApplication.CreateNewView();
int newViewId = 0;
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
Frame frame = new Frame();
frame.Navigate(typeof(SecondaryPage), null);
Window.Current.Content = frame;
// You have to activate the window in order to show it later.
Window.Current.Activate();
newViewId = ApplicationView.GetForCurrentView().Id;
});
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
}
Per visualizzare una nuova visualizzazione
Chiamare CoreApplication.CreateNewView per creare una nuova finestra e un thread per il contenuto della visualizzazione.
CoreApplicationView newView = CoreApplication.CreateNewView();
Tenere traccia dell'ID della nuova visualizzazione. Usa questo per mostrare la visualizzazione più tardi.
È possibile prendere in considerazione la creazione di un'infrastruttura nell'app per tenere traccia delle visualizzazioni create. Per un esempio, vedere la classe
nell'esempio di MultipleViews. int newViewId = 0;
Nella nuova discussione, riempi la finestra.
Utilizzi il metodo CoreDispatcher.RunAsync per pianificare il lavoro sul thread dell'interfaccia utente per la nuova visualizzazione. Usi un'espressione lambda per passare una funzione come argomento al metodo RunAsync. Il lavoro svolto nella funzione lambda viene eseguito nel thread della nuova visualizzazione.
In XAML in genere aggiungi un frame di
alla proprietà contentfinestra , quindi passa alla Frame a un Page XAML in cui hai definito il contenuto dell'app. Per ulteriori informazioni su frame e pagine, consulta la navigazione peer-to-peer tra due pagine . Dopo aver popolato la nuova Finestra
, è necessario chiamare il metodo della FinestraActivate per visualizzare la Finestra in un secondo momento. Questo lavoro si verifica nel thread della nuova visualizzazione, quindi la nuova finestra viene attivata. Infine, ottieni l'ID della nuova visualizzazione che si usa per mostrarla in un secondo momento. Anche in questo caso, questo lavoro si trova nel thread della nuova visualizzazione, quindi ApplicationView.GetForCurrentView ottiene l'ID della nuova visualizzazione.
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { Frame frame = new Frame(); frame.Navigate(typeof(SecondaryPage), null); Window.Current.Content = frame; // You have to activate the window in order to show it later. Window.Current.Activate(); newViewId = ApplicationView.GetForCurrentView().Id; });
Visualizza la nuova visualizzazione chiamando ApplicationViewSwitcher.TryShowAsStandaloneAsync.
Dopo aver creato una nuova visualizzazione, è possibile visualizzarla in una nuova finestra chiamando il metodo ApplicationViewSwitcher.TryShowAsStandaloneAsync. Il parametro viewId per questo metodo è un numero intero che identifica in modo univoco ognuna delle visualizzazioni nell'app. È possibile recuperare la visualizzazione ID usando la proprietà ApplicationView.Id o il metodo ApplicationView.GetApplicationViewIdForWindow.
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
Visualizzazione principale
La prima visualizzazione creata all'avvio dell'app viene denominata visualizzazione principale. Questa vista viene memorizzata nella proprietà CoreApplication.MainView e la sua proprietà IsMain è impostata su true. Non crei questa vista; viene creata dall'app. Il thread della vista principale funge da gestore per l'app e tutti gli eventi di attivazione dell'app vengono gestiti in questo thread.
Se le visualizzazioni secondarie sono aperte, la finestra della visualizzazione principale può essere nascosta, ad esempio facendo clic sul pulsante chiudi (x) nella barra del titolo della finestra, ma il thread rimane attivo. Se si chiama Chiudi sulla finestra della visualizzazione principale, si verifica un InvalidOperationException. Usare Application.Exit per chiudere l'app. Se il thread della visualizzazione principale viene terminato, l'app viene chiusa.
Visualizzazioni secondarie
Altre visualizzazioni, incluse tutte le visualizzazioni create chiamando CreateNewView nel codice dell'app, sono visualizzazioni secondarie. Sia la visualizzazione principale che le viste secondarie vengono archiviate nella raccolta CoreApplication.Views. In genere, si creano visualizzazioni secondarie in risposta a un'azione dell'utente. In alcuni casi, il sistema crea visualizzazioni secondarie per l'app.
Annotazioni
Puoi usare la funzionalità di accesso assegnato di Windows
Passare da una visualizzazione a un'altra
Valutare la possibilità di consentire all'utente di spostarsi da una finestra secondaria alla finestra padre. A tale scopo, usare il metodo ApplicationViewSwitcher.SwitchAsync. Chiami questo metodo dal thread della finestra da cui stai passando e trasmetti l'ID della vista della finestra a cui stai passando.
await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);
Quando si usa SwitchAsync, è possibile scegliere se chiudere la finestra iniziale e rimuoverla dalla barra delle applicazioni specificando il valore di ApplicationViewSwitchingOptions.