Condividi tramite


Mostra più visualizzazioni con ApplicationView

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 ApplicationView, chiamare il metodo statico ApplicationView.GetForCurrentView, che ottiene un'istanza di ApplicationView associata al thread del CoreApplicationViewcorrente.

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

  1. Chiamare CoreApplication.CreateNewView per creare una nuova finestra e un thread per il contenuto della visualizzazione.

    CoreApplicationView newView = CoreApplication.CreateNewView();
    
  2. 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;
    
  3. 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 Activate della Finestraper 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;
    });
    
  4. 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 per eseguire un'app in modalità tutto schermo . Quando si esegue questa operazione, il sistema crea una visualizzazione secondaria per presentare l'interfaccia utente dell'app sopra la schermata di blocco. Le visualizzazioni secondarie create dall'app non sono consentite, quindi se si tenta di visualizzare la propria visualizzazione secondaria in modalità tutto schermo, viene generata un'eccezione.

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.