Udostępnij przez


Pokaż wiele widoków za pomocą kontrolki ApplicationView

Pomóż swoim użytkownikom być bardziej produktywnymi, umożliwiając im wyświetlanie niezależnych części aplikacji w oddzielnych oknach. Podczas tworzenia wielu okien dla aplikacji każde okno działa niezależnie. Pasek zadań pokazuje poszczególne okna oddzielnie. Użytkownicy mogą przenosić, zmieniać rozmiar, pokazywać i ukrywać okna aplikacji niezależnie i przełączać się między oknami aplikacji, jakby były oddzielnymi aplikacjami. Każde okno działa we własnym wątku.

ważne interfejsy API: ApplicationViewSwitcher, CreateNewView

Co to jest widok?

Widok aplikacji to połączenie wątku 1:1 z oknem, które aplikacja wykorzystuje do wyświetlania zawartości. Jest on reprezentowany przez obiekt Windows.ApplicationModel.Core.CoreApplicationView.

Widoki są zarządzane przez obiekt CoreApplication. Wywołasz CoreApplication.CreateNewView, aby utworzyć obiekt CoreApplicationView. CoreApplicationView łączy CoreWindow i CoreDispatcher (przechowywane we właściwościach CoreWindow i Dispatcher). Można traktować CoreApplicationView jako obiekt używany przez środowisko uruchomieniowe systemu Windows do interakcji z podstawowym systemem Windows.

Zazwyczaj nie pracujesz bezpośrednio z CoreApplicationView. Zamiast tego środowisko uruchomieniowe systemu Windows udostępnia klasę ApplicationView w przestrzeni nazw Windows.UI.ViewManagement. Ta klasa udostępnia właściwości, metody i zdarzenia, które są używane podczas interakcji aplikacji z systemem okien. Aby pracować z ApplicationView, wywołaj statyczną metodę ApplicationView.GetForCurrentView, która zwraca wystąpienie ApplicationView powiązane z bieżącym wątkiemCoreApplicationView.

Podobnie struktura XAML opakowuje obiekt CoreWindow w obiekcie Windows.UI.XAML.Window. W aplikacji XAML zazwyczaj wchodzisz w interakcję z obiektem okna , a nie bezpośrednio z CoreWindow.

Pokaż nowy widok

Mimo że każdy układ aplikacji jest unikatowy, zalecamy dołączenie przycisku "nowe okno" w przewidywalnej lokalizacji, takiego jak prawy górny róg zawartości, którą można otworzyć w nowym oknie. Rozważ również dołączenie opcji menu kontekstowego do opcji "Otwórz w nowym oknie".

Przyjrzyjmy się krokom tworzenia nowego widoku. W tym miejscu nowy widok zostanie uruchomiony w odpowiedzi na kliknięcie przycisku.

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

Aby wyświetlić nowy widok

  1. Wywołaj CoreApplication.CreateNewView, aby utworzyć nowe okno i wątek dla zawartości widoku.

    CoreApplicationView newView = CoreApplication.CreateNewView();
    
  2. Śledź identyfikator nowego widoku. Ta opcja służy do wyświetlania widoku później.

    Warto rozważyć utworzenie infrastruktury w aplikacji, aby ułatwić śledzenie utworzonych widoków. Zobacz klasę ViewLifetimeControl w próbie MultipleViews jako przykład.

    int newViewId = 0;
    
  3. W nowym wątku wypełnij okno.

    Użyjesz metody CoreDispatcher.RunAsync, aby zaplanować pracę nad wątkiem interfejsu użytkownika dla nowego widoku. Aby przekazać funkcję jako argument do metody RunAsync, należy użyć wyrażenia lambda . Praca wykonywana w funkcji lambda odbywa się w wątku nowego widoku.

    W XAML zazwyczaj dodajesz ramkę do oknawłaściwości Content, a następnie nawigujesz ramkę do strony XAML, na której zdefiniowałeś zawartość aplikacji. Aby uzyskać więcej informacji na temat ramek i stron, zobacz sekcję o nawigacji między dwiema stronami typu peer-to-peer.

    Po wypełnieniu nowego okna , należy wywołać metodę Activate dla okna Window, aby później wyświetlić okno . Ta praca odbywa się w wątku nowego widoku, więc jest aktywowane nowe okno .

    Na koniec uzyskaj identyfikator nowego widoku, którego użyjesz do wyświetlenia widoku później. Ponownie, praca ta jest wykonywana w wątku nowego widoku, dlatego ApplicationView.GetForCurrentView pobiera identyfikator nowego widoku.

    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. Pokaż nowy widok, wywołując ApplicationViewSwitcher.TryShowAsStandaloneAsync.

    Po utworzeniu nowego widoku można go wyświetlić w nowym oknie, wywołując metodę ApplicationViewSwitcher.TryShowAsStandaloneAsync. Parametr viewId dla tej metody jest liczbą całkowitą, która jednoznacznie identyfikuje każdy widok w aplikacji. Aby pobrać identyfikator widoku , należy użyć właściwości ApplicationView.Id lub metody ApplicationView.GetApplicationViewIdForWindow.

    bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
    

Widok główny

Pierwszy widok utworzony podczas uruchamiania aplikacji jest nazywany głównym widokiem . Ten widok jest przechowywany we właściwości CoreApplication.MainView, a jej właściwość IsMain ma wartość true. Nie utworzysz tego widoku; jest ona tworzona przez aplikację. Wątek widoku głównego służy jako menedżer aplikacji, a wszystkie zdarzenia aktywacji aplikacji trafiają do tego wątku.

Jeśli widoki pomocnicze są otwarte, okno widoku głównego może być ukryte — na przykład klikając przycisk Zamknij (x) na pasku tytułu okna — ale jego wątek pozostaje aktywny. Wywołanie Close w oknie widoku głównego powoduje wystąpienie błędu InvalidOperationException. (Użyj Application.Exit, aby zamknąć aplikację). Jeśli wątek widoku głównego zostanie zakończony, aplikacja zostanie zamknięta.

Widoki pomocnicze

Inne widoki, w tym wszystkie widoki tworzone przez wywołanie CreateNewView w kodzie aplikacji, są widokami pomocniczymi. Zarówno widok główny, jak i widoki pomocnicze są przechowywane w kolekcji CoreApplication.Views. Zazwyczaj widoki pomocnicze są tworzone w odpowiedzi na akcję użytkownika. W niektórych przypadkach system tworzy widoki pomocnicze dla aplikacji.

Uwaga / Notatka

Aby uruchomić aplikację w trybie kiosku , możesz użyć funkcji przypisanego dostępu systemu Windows. Gdy to zrobisz, system tworzy widok pomocniczy do prezentowania interfejsu użytkownika aplikacji powyżej ekranu blokady. Widoki pomocnicze utworzone przez aplikację nie są dozwolone, więc jeśli spróbujesz wyświetlić własny widok pomocniczy w trybie kiosku, zostanie zgłoszony wyjątek.

Przełączanie z jednego widoku na inny

Rozważ udostępnienie użytkownikowi sposobu na przejście z okna pomocniczego z powrotem do okna nadrzędnego. W tym celu użyj metody ApplicationViewSwitcher.SwitchAsync. Wywołasz tę metodę z wątku okna, z którego przechodzisz, i przekażesz identyfikator widoku okna, do którego przechodzisz.

await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);

Jeśli używasz SwitchAsync, możesz wybrać, czy chcesz zamknąć okno początkowe i usunąć je z paska zadań, określając wartość ApplicationViewSwitchingOptions.