Megosztás a következőn keresztül:


Több nézet megjelenítése az ApplicationView használatával

A felhasználók hatékonyabb munkavégzésének elősegítése azáltal, hogy lehetővé teszi számukra, hogy külön ablakban tekintsék meg az alkalmazás független részeit. Ha több ablakot hoz létre egy alkalmazáshoz, minden ablak egymástól függetlenül viselkedik. A tálcán az egyes ablakok külön láthatók. A felhasználók egymástól függetlenül áthelyezhetik, átméretezhetik, megjeleníthetik és elrejthetik az alkalmazásablakokat, és úgy válthatnak az alkalmazásablakok között, mintha különálló alkalmazások lennének. Minden ablak saját szálon működik.

Fontos API-k: ApplicationViewSwitcher, CreateNewView

Mit jelent a nézet?

Az alkalmazásnézet egy szál és egy ablak 1:1-ás párosítása, amelyet az alkalmazás a tartalom megjelenítésére használ. Ezt egy Windows.ApplicationModel.Core.CoreApplicationView objektum képviseli.

A nézeteket a CoreApplication objektum kezeli. A CoreApplication.CreateNewView meghívásával hoz létre egy CoreApplicationView objektumot. A CoreApplicationView összefogja a CoreWindow és a CoreDispatcher elemeket (melyek a CoreWindow és Dispatcher tulajdonságokban vannak tárolva). A CoreApplicationView az az objektum, amelyet a Windows futtatókörnyezet használ az alapvető Windows-rendszerrel való interakcióhoz.

Általában nem dolgozik közvetlenül a CoreApplicationView. Ehelyett a Windows Futtatókörnyezet biztosítja az ApplicationView osztályt a Windows.UI.ViewManagement névtérben. Ez az osztály olyan tulajdonságokat, metódusokat és eseményeket biztosít, amelyeket az alkalmazás az ablakkezelő rendszerrel való interakció során használ. Ha egy ApplicationViewpéldánnyal szeretne dolgozni, hívja meg a statikus ApplicationView.GetForCurrentView metódust, amely az aktuális CoreApplicationViewszálához kötött ApplicationView példányt hozza létre.

Hasonlóképpen, az XAML-keretrendszer egy Windows.UI.XAML.Window objektumba burkolja a CoreWindow objektumot. Az XAML-alkalmazásokban általában a Ablak objektumot használja ahelyett, hogy közvetlenül a CoreWindowobjektummal dolgozna.

Új nézet megjelenítése

Bár az egyes alkalmazáselrendezések egyediek, javasoljuk, hogy az "új ablak" gombot egy kiszámítható helyre, például a tartalom jobb felső sarkába, amely megnyitható egy új ablakban. Fontolja meg azt is, hogy a helyi menübe bekerüljön a "Megnyitás új ablakban" opció.

Tekintsük meg az új nézet létrehozásának lépéseit. Itt az új nézet egy gombnyomásra indul el.

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

Új nézet megjelenítése

  1. A CoreApplication.CreateNewView meghívásával új ablakot és szálat hozhat létre a nézet tartalmához.

    CoreApplicationView newView = CoreApplication.CreateNewView();
    
  2. Kövesse nyomon az új nézet azonosítóját. Ezzel később is megjelenítheti a nézetet.

    Érdemes lehet néhány infrastruktúrát beépíteni az alkalmazásba, hogy segítsen nyomon követni a létrehozott nézeteket. Példaként tekintse meg a ViewLifetimeControlMultipleViews-minta osztályát.

    int newViewId = 0;
    
  3. Az új szálon töltse ki az ablakot.

    A CoreDispatcher.RunAsync metódussal ütemezheti a munkát az új nézet felhasználói felületi szálán. Egy lambda-kifejezéssel adtok át egy függvényt argumentumként a RunAsync metódusnak. A lambda függvényben végzett munka az új nézet szálán történik.

    Az XAML-ben általában hozzáad egy keretet a ablaktartalom tulajdonságához, majd navigáljon a kerettel egy XAML oldalra, ahol az alkalmazás tartalmát definiálta. A képkockákkal és a lapokkal kapcsolatos további információkért lásd a két oldal közötti közvetlen navigációt pontban.

    Az új Ablak feltöltése után meg kell hívnia a AblakAktiválás metódusát a ablak későbbi megjelenítéséhez. Ez a munka az új nézet szálán történik, így aktiválódik az új ablak.

    Végül szerezze be az új nézet azonosítóját , amellyel később megjelenítheti a nézetet. Ez a munka újra az új nézet szálához tartozik, így a ApplicationView.GetForCurrentView megkapja az új nézet azonosítóját.

    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. Az új nézet megjelenítéséhez hívja meg ApplicationViewSwitcher.TryShowAsStandaloneAsync.

    Miután létrehozott egy új nézetet, megjelenítheti azt egy új ablakban az ApplicationViewSwitcher.TryShowAsStandaloneAsync metódus meghívásával. A metódus viewId paramétere egy egész szám, amely egyedileg azonosítja az alkalmazás összes nézetét. A nézet azonosítója a ApplicationView.Id tulajdonság vagy az ApplicationView.GetApplicationViewIdForWindow metódus használatával érhető el.

    bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
    

A fő nézet

Az alkalmazás indításakor létrehozott első nézet neve fő nézet. Ez a nézet a CoreApplication.MainView tulajdonságban van tárolva, és az IsMain tulajdonsága igaz. Ezt a nézetet nem hozza létre; az alkalmazás hozta létre. A fő nézet szála szolgál az alkalmazás kezelőjeként, és az összes alkalmazásaktiválási esemény ezen a szálon lesz kézbesítve.

Ha a másodlagos nézetek meg vannak nyitva, a fő nézet ablaka elrejthető – például a bezárás (x) gombra kattintva az ablak címsorában –, de a szál aktív marad. Amikor a főnézet AblakBezárás hívását végezzük el, akkor egy InvalidOperationException jön létre. (Az Application.Exit használatával zárja be az alkalmazást.) Ha a főnézet szála leáll, az alkalmazás bezárul.

Másodlagos nézetek

A többi nézet, beleértve az alkalmazáskódban a CreateNewView meghívásával létrehozott összes nézetet is, másodlagos nézetek. A fő nézet és a másodlagos nézetek is a CoreApplication.Views gyűjteményben vannak tárolva. Általában másodlagos nézeteket hoz létre egy felhasználói műveletre válaszul. Bizonyos esetekben a rendszer másodlagos nézeteket hoz létre az alkalmazás számára.

Megjegyzés:

A Windows hozzárendelt hozzáférési funkcióval egy alkalmazást kioszk módban futtathat. Ha ezt teszi, a rendszer létrehoz egy másodlagos nézetet, amely az alkalmazás felhasználói felületét jeleníti meg a zárolási képernyő felett. Az alkalmazás által létrehozott másodlagos nézetek nem engedélyezettek, ezért ha kioszk módban próbálja megjeleníteni a saját másodlagos nézetét, kivétel keletkezik.

Váltás egyik nézetről a másikra

Fontolja meg, hogy a felhasználó hogyan navigálhat vissza a másodlagos ablakból a szülőablakba. Ehhez használja az ApplicationViewSwitcher.SwitchAsync metódust . Ezt a metódust annak az ablaknak a szálából hívhatja meg, amelyről vált, és átadja annak az ablaknak a nézetazonosítóját, amelyre vált.

await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);

A SwitchAsync használata esetén az ApplicationViewSwitchingOptions értékének megadásával megadhatja, hogy be szeretné-e zárni a kezdeti ablakot, és el szeretné-e távolítani a tálcáról.