Freigeben über


Anzeigen mehrerer Ansichten mit ApplicationView

Helfen Sie Ihren Benutzern, produktiver zu sein, indem sie unabhängige Teile Ihrer App in separaten Fenstern anzeigen können. Wenn Sie mehrere Fenster für eine App erstellen, verhält sich jedes Fenster unabhängig voneinander. Die Taskleiste zeigt jedes Fenster separat an. Benutzer können App-Fenster unabhängig voneinander verschieben, ändern, anzeigen und ausblenden und zwischen App-Fenstern wechseln, als wären sie separate Apps. Jedes Fenster wird in einem eigenen Thread ausgeführt.

Wichtige APIs: ApplicationViewSwitcher, CreateNewView

Was ist eine Ansicht?

Eine App-Ansicht ist die 1:1-Zuordnung eines Threads zu einem Fenster, das die App zum Anzeigen von Inhalten verwendet. Es wird durch ein Windows.ApplicationModel.Core.CoreApplicationView - Objekt dargestellt.

Ansichten werden vom CoreApplication-Objekt verwaltet. Sie rufen "CoreApplication.CreateNewView" auf, um ein CoreApplicationView-Objekt zu erstellen. Die CoreApplicationView- vereint ein CoreWindow- und ein CoreDispatcher- (gespeichert in den Eigenschaften CoreWindow- und Dispatcher-). Sie können sich die CoreApplicationView als das Objekt vorstellen, das von der Windows-Runtime für die Interaktion mit dem zentralen Windows-System verwendet wird.

Normalerweise arbeiten Sie nicht direkt mit der CoreApplicationView. Stattdessen stellt die Windows-Runtime die ApplicationView Klasse im Windows.UI.ViewManagement Namespace bereit. Diese Klasse stellt Eigenschaften, Methoden und Ereignisse bereit, die Sie verwenden, wenn Ihre App mit dem Fenstersystem interagiert. Rufen Sie zum Arbeiten mit einer ApplicationView-die statische ApplicationView.GetForCurrentView-Methode auf, die eine ApplicationView-instanz abruft, die an die aktuelle CoreApplicationView's Thread gebunden ist.

Ebenso umschließt das XAML-Framework das CoreWindow--Objekt in einem Windows.UI.XAML.Window-Objekt. In einer XAML-App interagieren Sie in der Regel mit dem Window-Objekt, statt mit dem CoreWindowdirekt zu arbeiten.

Zeige eine neue Ansicht

Obwohl jedes App-Layout eindeutig ist, empfehlen wir, eine Schaltfläche "Neues Fenster" an einer vorhersagbaren Position einzugeben, z. B. die obere rechte Ecke des Inhalts, der in einem neuen Fenster geöffnet werden kann. Ziehen Sie außerdem in Betracht, eine Kontextmenüoption für „In einem neuen Fenster öffnen“ hinzuzufügen.

Sehen wir uns die Schritte zum Erstellen einer neuen Ansicht an. Hier wird die neue Ansicht als Reaktion auf einen Klick auf eine Schaltfläche gestartet.

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);
}

Eine neue Ansicht anzeigen

  1. Rufen Sie CoreApplication.CreateNewView auf, um für den Ansichtsinhalt ein neues Fenster und einen neuen Thread zu erstellen.

    CoreApplicationView newView = CoreApplication.CreateNewView();
    
  2. Verfolgen Sie die -ID von der neuen Ansicht. Sie verwenden dies, um die Ansicht später zu zeigen.

    Möglicherweise sollten Sie in Betracht ziehen, eine Infrastruktur in Ihrer App zu erstellen, um die von Ihnen erstellten Ansichten nachzuverfolgen. Ein Beispiel finden Sie in der ViewLifetimeControl Klasse im MultipleViews-Beispiel.

    int newViewId = 0;
    
  3. Füllen Sie im neuen Thread das Fenster auf.

    Sie verwenden die CoreDispatcher.RunAsync Methode, um Aufgaben im Benutzeroberflächen-Thread für die neue Ansicht zu planen. Sie verwenden einen Lambda-Ausdruck, um eine Funktion als Argument an die Methode RunAsync zu übergeben. Die Arbeit, die Sie in der Lambda-Funktion ausführen, erfolgt im Thread der neuen Ansicht.

    In XAML fügen Sie in der Regel eine Frame- zur WindowContent-Eigenschaft hinzu und navigieren Sie dann den Frame- zu einer XAML-Seite, in der Sie den App-Inhalt definiert haben. Weitere Informationen zu Frames und Seiten finden Sie unter Peer-to-peer-Navigation zwischen zwei Seiten.

    Nachdem das neue Fenster aufgefüllt wurde, müssen Sie die Methode FensterActivate aufrufen, um das Fenster später anzuzeigen. Diese Arbeit erfolgt im Thread der neuen Ansicht, sodass das neue Fenster aktiviert wird.

    Rufen Sie schließlich die ID der neuen Ansicht ab, die Sie verwenden, um die Ansicht später anzuzeigen. Auch hier läuft diese Arbeit im Thread der neuen Ansicht ab, sodass ApplicationView.GetForCurrentView die Id der neuen Ansicht abruft.

    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. Zeigen Sie die neue Ansicht an, indem Sie ApplicationViewSwitcher.TryShowAsStandaloneAsyncaufrufen.

    Nachdem Sie eine neue Ansicht erstellt haben, können Sie sie in einem neuen Fenster anzeigen, indem Sie die ApplicationViewSwitcher.TryShowAsStandaloneAsync-Methode aufrufen. Der ViewId-Parameter für diese Methode ist eine ganze Zahl, die jede der Ansichten in Ihrer App eindeutig identifiziert. Sie rufen die Ansicht ID mithilfe der eigenschaft ApplicationView.Id oder der ApplicationView.GetApplicationViewIdForWindow-Methode ab.

    bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
    

Die Hauptansicht

Die erste Ansicht, die beim Starten der App erstellt wird, wird als Hauptansicht bezeichnet. Diese Ansicht wird in der Eigenschaft CoreApplication.MainView gespeichert, und die IsMain-Eigenschaft ist wahr. Sie erstellen diese Ansicht nicht; sie wird von der App erstellt. Der Thread der Hauptansicht dient als Manager für die App, und alle App-Aktivierungsereignisse werden in diesem Thread übermittelt.

Wenn sekundäre Ansichten geöffnet sind, kann das Fenster der Hauptansicht ausgeblendet werden, z. B. durch Klicken auf die Schaltfläche "Schließen" (x) in der Fenstertitelleiste, der Thread bleibt jedoch aktiv. Das Aufrufen von Schließen im Fenster der Hauptansicht bewirkt, dass eine InvalidOperationException- auftritt. (Verwenden Sie Application.Exit , um Ihre App zu schließen.) Wenn der Thread der Hauptansicht beendet wird, wird die App geschlossen.

Sekundäre Ansichten

Andere Ansichten, einschließlich aller Ansichten, die Sie durch Aufrufen von CreateNewView in Ihrem App-Code erstellen, sind sekundäre Ansichten. Sowohl die Hauptansicht als auch die sekundären Ansichten werden in der CoreApplication.Views Auflistung gespeichert. In der Regel erstellen Sie sekundäre Ansichten als Reaktion auf eine Benutzeraktion. In einigen Fällen erstellt das System sekundäre Ansichten für Ihre App.

Hinweis

Sie können das Feature "Windows zugewiesener Zugriff" verwenden, um eine App im Kioskmodusauszuführen. Wenn Sie dies tun, erstellt das System eine sekundäre Ansicht, um Ihre App-UI über dem Sperrbildschirm darzustellen. Von der App erstellte sekundäre Ansichten sind nicht zulässig. Wenn Sie also versuchen, ihre eigene sekundäre Ansicht im Kioskmodus anzuzeigen, wird eine Ausnahme ausgelöst.

Wechseln von einer Ansicht zu einer anderen

Erwägen Sie, eine Möglichkeit für den Benutzer bereitzustellen, von einem sekundären Fenster zurück zum übergeordneten Fenster zu navigieren. Verwenden Sie dazu die ApplicationViewSwitcher.SwitchAsync-Methode . Sie rufen diese Methode aus dem Thread des Fensters auf, von dem Sie wechseln, und übergeben die Ansichts-ID des Fensters, zu dem Sie wechseln.

await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);

Wenn Sie SwitchAsyncverwenden, können Sie auswählen, ob Sie das Anfangsfenster schließen und aus der Taskleiste entfernen möchten, indem Sie den Wert von ApplicationViewSwitchingOptionsangeben.