Aracılığıyla paylaş


ApplicationView ile birden çok görünüm gösterme

Uygulamanızın bağımsız bölümlerini ayrı pencerelerde görüntülemelerine izin vererek kullanıcılarınızın daha üretken olmalarına yardımcı olun. Bir uygulama için birden çok pencere oluşturduğunuzda, her pencere bağımsız olarak davranır. Görev çubuğu her pencereyi ayrı olarak gösterir. Kullanıcılar uygulama pencerelerini bağımsız olarak taşıyabilir, yeniden boyutlandırabilir, gösterebilir ve gizleyebilir ve uygulama pencereleri arasında ayrı uygulamalar gibi geçiş yapabilir. Her pencere kendi iş ipliğinde çalışır.

Önemli API'ler: ApplicationViewSwitcher, CreateNewView

Görünüm ne demek?

Uygulama görünümü, bir thread ile uygulamanın içeriği görüntülemek için kullandığı pencerenin 1:1 eşleştirilmesidir. Bir Windows.ApplicationModel.Core.CoreApplicationView nesnesiyle temsil edilir.

Görünümler CoreApplication nesnesi tarafından yönetilir. CoreApplicationView nesnesi oluşturmak için CoreApplication.CreateNewView'u çağırırsınız. CoreApplicationView, CoreWindow ve Dispatcher özelliklerinde depolanan bir CoreWindow ile bir CoreDispatcher'i bir araya getirir. CoreApplicationView'ı, Windows Çalışma Zamanı'nın çekirdek Windows sistemiyle etkileşim kurmak için kullandığı nesne olarak düşünebilirsiniz.

Genellikle doğrudan CoreApplicationView ile çalışmazsınız. Bunun yerine, Windows Çalışma Zamanı, Windows.UI.ViewManagement ad alanında ApplicationView sınıfını sağlar. Bu sınıf, uygulamanız pencereleme sistemiyle etkileşim kurarken kullandığınız özellikleri, yöntemleri ve olayları sağlar. bir ApplicationViewile çalışmak için, geçerli CoreApplicationViewiş parçacığına bağlı bir ApplicationView örneği alan ApplicationView.GetForCurrentView statik çağırın.

Benzer şekilde, XAML çerçevesi CoreWindow nesnesini bir Windows.UI.XAML.Window nesnesine sarmalar. XAML uygulamasında genellikle doğrudan CoreWindow ile çalışmak yerine Window nesnesiyle etkileşim kurarsınız.

Yeni bir görünüm göster

Her uygulama düzeni benzersiz olsa da, yeni bir pencerede açılabilen içeriğin sağ üst köşesi gibi öngörülebilir bir konuma "yeni pencere" düğmesi eklemenizi öneririz. "Yeni pencerede aç" seçeneğine bağlam menüsü seçeneği eklemeyi de göz önünde bulundurun.

Şimdi yeni görünüm oluşturma adımlarına göz atalım. Burada, bir düğmeye tıklamaya yanıt olarak yeni görünüm başlatılır.

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

Yeni bir görünüm göstermek için

  1. Görünüm içeriği için yeni bir pencere ve iş parçacığı oluşturmak için CoreApplication.CreateNewView'u çağırın.

    CoreApplicationView newView = CoreApplication.CreateNewView();
    
  2. Yeni görünümün kimliğini izleyin. Görünümü daha sonra göstermek için bunu kullanırsınız.

    Oluşturduğunuz görünümleri izlemenize yardımcı olması için uygulamanızda bazı altyapılar oluşturmayı düşünebilirsiniz. ViewLifetimeControl Bir örnek için MultipleViews örneğindeki sınıfına bakın.

    int newViewId = 0;
    
  3. Yeni iş parçacığında pencereyi doldurun.

    Yeni görünüm için kullanıcı arabirimi iş parçacığında çalışmayı zamanlamak için CoreDispatcher.RunAsync yöntemini kullanırsınız. Siz bir işlevi RunAsync yöntemine argüman olarak geçirmek için lambda ifadesi kullanırsınız. Lambda işlevinde yaptığınız iş, yeni görünümün iş parçacığında gerçekleşir.

    XAML'de, genellikle Pencere'nin İçerik özelliğine bir Çerçeve eklersiniz, ardından Çerçeve'i uygulama içeriğinizi tanımladığınız bir XAML Sayfası'ya yönlendirirsiniz. Çerçeveler ve sayfalar hakkında daha fazla bilgi için iki sayfa arasında eşler arası gezinmekısmına bakınız.

    Yeni Penceresi doldurulduktan sonra, Penceresini daha sonra göstermek için Penceresi'in Aktive Et yöntemini çağırmanız gerekir. Bu çalışma yeni görünümün iş parçacığında gerçekleşir, bu nedenle yeni Window etkinleştirilir.

    Son olarak, görünümü daha sonra göstermek için kullandığınız yeni görünümün ID'sini alın. Bu çalışma yine yeni görünümün iş parçacığında olduğundan ApplicationView.GetForCurrentView, yeni görünümün Kimliği alır.

    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. ApplicationViewSwitcher.TryShowAsStandaloneAsync çağrısı yaparak yeni görünümü gösterin.

    Yeni bir görünüm oluşturduktan sonra ApplicationViewSwitcher.TryShowAsStandaloneAsync yöntemini çağırarak bunu yeni bir pencerede gösterebilirsiniz. Bu yöntemin viewId parametresi, uygulamanızdaki görünümlerin her birini benzersiz olarak tanımlayan bir tamsayıdır. ApplicationView.Id özelliğini veya ApplicationView.GetApplicationViewIdForWindow yöntemini kullanarak görünüm kimliği alırsınız.

    bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
    

Ana görünüm

Uygulamanız başlatıldığında oluşturulan ilk görünüm ana görünüm olarak adlandırılır. Bu görünüm CoreApplication.MainView özelliğinde depolanır ve IsMain özelliği true değeridir. Bu görünümü oluşturmazsınız; uygulama tarafından oluşturulur. Ana görünümün iş parçacığı, uygulama için yönetici rolünü oynar ve tüm uygulama etkinleştirme olayları bu iş parçacığında gerçekleştirilir.

İkincil görünümler açıksa, ana görünümün penceresi gizlenebilir; örneğin, pencere başlık çubuğundaki kapat (x) düğmesine tıklanabilir, ancak iş parçacığı etkin kalır. Ana görünümün Penceresi üzerinde çağrı Kapat, bir Geçersizİşlemİstisnası oluşmasına neden olur. (Uygulamanızı kapatmak için Application.Exit kullanın.) Ana görünümün iş parçacığı sonlandırılırsa uygulama kapanır.

İkincil görünümler

Uygulama kodunuzda CreateNewView'u çağırarak oluşturduğunuz tüm görünümler de dahil olmak üzere diğer görünümler ikincil görünümlerdir. Hem ana görünüm hem de ikincil görünümler CoreApplication.Views koleksiyonunda depolanır. Genellikle, bir kullanıcı eylemine yanıt olarak ikincil görünümler oluşturursunuz. Bazı durumlarda sistem, uygulamanız için ikincil görünümler oluşturur.

Uyarı

Bir uygulamayıkiosk modunda çalıştırmak için Windows atanmış erişim özelliğini kullanabilirsiniz. Bunu yaptığınızda sistem, uygulama kullanıcı arabiriminizi kilit ekranının üzerinde sunmak için ikincil bir görünüm oluşturur. Uygulama tarafından oluşturulan ikincil görünümlere izin verilmez, bu nedenle bilgi noktası modunda kendi ikincil görünümünüzü göstermeye çalışırsanız bir özel durum oluşur.

Bir görünümden diğerine geçme

Kullanıcının ikincil bir pencereden üst penceresine geri dönmesi için bir yol sağlamayı göz önünde bulundurun. Bunu yapmak için ApplicationViewSwitcher.SwitchAsync yöntemini kullanın. Pencereler arası geçiş yaptığınızda, kullandığınız pencerenin iş parçacığından bu yöntemi çağırır ve geçtiğiniz pencerenin görünüm kimliğini iletirsiniz.

await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);

SwitchAsync'i kullandığınızda, ApplicationViewSwitchingOptions değerini belirterek ilk pencereyi kapatıp görev çubuğundan kaldırmak isteyip istemediğinizi seçebilirsiniz.