Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Not
Bu kitap 2016 baharında yayımlanmıştır ve o zamandan beri güncellenmemiştir. Kitapta değerli kalan çok şey vardır, ancak bazı malzemeler eskidir ve bazı konular artık tamamen doğru veya eksiksiz değildir.
Birçok uygulama, kullanıcının gezindiği birden çok sayfadan oluşur. Uygulamanın her zaman bir ana sayfası veya giriş sayfası vardır ve oradan kullanıcı geri gitmek için bir yığında tutulan diğer sayfalara gider. Ek gezinti seçenekleri Bölüm 25'te ele alınmıştır. Sayfa Çeşitleri.
Kalıcı sayfalar ve modsuz sayfalar
VisualElement yeni bir Navigation sayfaya gitmek için aşağıdaki iki yöntemi içeren türündeki INavigationbir özelliği tanımlar:
Her iki yöntem de bir Page örneği bağımsız değişken olarak kabul eder ve bir Task nesne döndürür. Aşağıdaki iki yöntem önceki sayfaya geri döner:
Kullanıcı arabiriminin kendi Geri düğmesi varsa (Android ve Windows telefonlarında olduğu gibi) uygulamanın bu yöntemleri çağırması gerekli değildir.
Bu yöntemler herhangi bir VisualElementiçinden kullanılabilir olsa da, genellikle geçerli Page örneğin özelliğinden Navigation çağrılır.
Uygulamalar genellikle kullanıcının önceki sayfaya dönmeden önce sayfada bazı bilgiler sağlaması gerektiğinde kalıcı sayfalar kullanır. Kalıcı olmayan sayfalar bazen modeless veya hiyerarşik olarak adlandırılır. Sayfadaki hiçbir şey onu kalıcı veya modsuz olarak ayırt etmez; bunun yerine, bu yönteme gitmek için kullanılan yöntem tarafından yönetilir. Tüm platformlarda çalışmak için, kalıcı bir sayfanın önceki sayfaya geri dönmek için kendi kullanıcı arabirimini sağlaması gerekir.
ModelessAndModal örneği, moduz ve kalıcı sayfalar arasındaki farkı keşfetmenizi sağlar. Sayfa gezintisi kullanan herhangi bir uygulama, giriş sayfasını NavigationPage genellikle programın App sınıfında oluşturucuya geçirmelidir. Bir bonus, artık iOS için sayfada bir Padding ayarlamanıza gerek olmamasıdır.
Modsuz sayfalar için sayfanın Title özelliğinin görüntülendiğini göreceksiniz. iOS, Android ve Windows tablet ve masaüstü platformlarının tümü, önceki sayfaya geri dönmek için bir kullanıcı arabirimi öğesi sağlar. Elbette Android ve Windows phone cihazlarının geri dönmek için standart bir Geri düğmesi vardır.
Kalıcı sayfalar için sayfa Title görüntülenmez ve önceki sayfaya geri dönmek için kullanıcı arabirimi öğesi sağlanmaz. Önceki sayfaya dönmek için Android ve Windows telefon standart Geri düğmesini kullanabilirsiniz ancak diğer platformlardaki kalıcı sayfanın geri dönmek için kendi mekanizmasını sağlaması gerekir.
Animasyonlu sayfa geçişleri
Sayfa geçişinin bir animasyon içermesini istiyorsanız, çeşitli gezinti yöntemlerinin alternatif sürümlerine true ayarladığınız ikinci bir Boole bağımsız değişkeni sağlanır:
Ancak, standart sayfa gezinti yöntemleri varsayılan olarak animasyonu içerir, bu nedenle bunlar yalnızca başlangıçtaki belirli bir sayfaya (bu bölümün sonuna doğru açıklandığı gibi) veya kendi giriş animasyonunuzu sağlarken (Bölüm22'de açıklandığı gibi) gezinmek için değerlidir. Animasyon).
Görsel ve işlevsel varyasyonlar
NavigationPage yönteminizde App sınıfın örneğini oluştururken ayarlayabileceğiniz iki özellik içerir:
NavigationPage ayrıca, ayarlandıkları belirli sayfayı etkileyen dört ekli bağlanabilir özellik içerir:
SetHasBackButtonveGetHasBackButtonSetHasNavigationBarveGetHasNavigationBarSetBackButtonTitleveGetBackButtonTitleyalnızca iOS üzerinde çalışınSetTitleIconveGetTitleIconyalnızca iOS ve Android üzerinde çalışın
Mekaniği keşfetme
Sayfa gezinti yöntemlerinin tümü zaman uyumsuz ve ile awaitkullanılmalıdır. Tamamlanma, sayfa gezintisinin tamamlandığını göstermez, ancak yalnızca sayfa gezinti yığınını incelemenin güvenli olduğunu gösterir.
Bir sayfa diğerine geçtiğinde, ilk sayfa genellikle yöntemine OnDisappearing bir çağrı alır ve ikinci sayfa yöntemine OnAppearing bir çağrı alır. Benzer şekilde, bir sayfa diğerine döndüğünde, ilk sayfa yöntemine OnDisappearing bir çağrı alır ve ikinci sayfa genellikle yöntemine OnAppearing bir çağrı alır. Bu çağrıların sırası (ve gezintiyi çağıran zaman uyumsuz yöntemlerin tamamlanması) platforma bağlıdır. Önceki iki deyimde "genel" sözcüğünün kullanılması, bu yöntem çağrılarının gerçekleşmediği Android kalıcı sayfa gezintisi nedeniyledir.
Ayrıca ve OnDisappearing yöntemlerine yapılan çağrılar sayfa gezintisini OnAppearing belirtmez.
Arabirim, INavigation gezinti yığınını incelemenize olanak sağlayan iki koleksiyon özelliği içerir:
NavigationStackIReadOnlyList<Page>modsuz yığın türüModalStackkalıcı yığın türüIReadOnlyList<Page>
Bu yığınlara özelliğinden Navigation (sınıfın App MainPage özelliği NavigationPage olmalıdır) erişmek en güvenlidir. Bu yığınları yalnızca zaman uyumsuz sayfa gezinti yöntemleri tamamlandıktan sonra incelemek güvenlidir. CurrentPage özelliğiNavigationPage, geçerli sayfa kalıcı bir sayfaysa geçerli sayfayı göstermez, ancak bunun yerine son modsuz sayfayı gösterir.
SinglePageNavigation örneği, sayfa gezintisini, yığınları ve yasal sayfa gezinti türlerini keşfetmenizi sağlar:
- Modsuz bir sayfa başka bir modsuz sayfaya veya kalıcı bir sayfaya gidebilir
- Kalıcı sayfa yalnızca başka bir kalıcı sayfaya gidebilir
Kalıcılığı zorunlu tutma
Bir uygulama, kullanıcıdan bazı bilgiler almak gerektiğinde kalıcı bir sayfa kullanır. Bu bilgiler sağlanana kadar kullanıcının önceki sayfaya dönmesi yasaklanmalıdır. iOS'ta, yalnızca kullanıcı sayfayı tamamladığında Geri düğmesi sağlamak ve etkinleştirmek kolaydır. Ancak Android ve Windows telefon cihazları için uygulama yöntemi geçersiz kılmalı OnBackButtonPressed ve ModalEnforcement örneğinde gösterildiği gibi program Geri düğmesinin kendisini işlediyse döndürmelidirtrue.
MvvmEnforcement örneği, bunun bir MVVM senaryosunda nasıl çalıştığını gösterir.
Gezinti varyasyonları
Belirli bir kalıcı sayfaya birden çok kez gidilebiliyorsa, kullanıcının bilgileri yeniden yazmak yerine düzenleyebilmesi için bilgileri saklaması gerekir. Bunu, kalıcı sayfanın belirli bir örneğini tutarak işleyebilirsiniz, ancak daha iyi bir yaklaşım (özellikle iOS'ta) bilgileri bir görünüm modelinde korumaktır.
Gezinti menüsü oluşturma
ViewGalleryType örneği, listele menü öğelerinin kullanılmasını TableView gösterir. Her öğe belirli bir sayfa için bir Type nesneyle ilişkilendirilir. Bu öğe seçildiğinde, program sayfayı başlatır ve sayfaya gider.
ViewGalleryInst örneği, menünün türler yerine her sayfanın örneklerini içermesi açısından biraz farklıdır. Bu, her sayfadaki bilgilerin korunmasına yardımcı olur, ancak tüm sayfaların program başlangıcında örneği oluşturulmalıdır.
Gezinti yığınını düzenleme
StackManipulation , tarafından INavigation tanımlanan ve gezinti yığınını yapılandırılmış bir şekilde işlemenizi sağlayan çeşitli işlevleri gösterir:
RemovePageInsertPageBeforePopToRootAsyncvePopToRootAsyncisteğe bağlı animasyon ile
Dinamik sayfa oluşturma
BuildAPage örneği, kullanıcı girişlerine göre çalışma zamanında bir sayfa oluşturmayı gösterir.
Veri aktarımı desenleri
Genellikle sayfalar arasında veri paylaşmak, gezinilen bir sayfaya veri aktarmak ve bir sayfanın verileri çağıran sayfaya döndürmesi gerekir. Bunu yapmak için çeşitli teknikler vardır.
Oluşturucu bağımsız değişkenleri
Yeni bir sayfaya gezinirken, sayfanın kendisini başlatmasını sağlayan bir oluşturucu bağımsız değişkeniyle sayfa sınıfı örneği oluşturmak mümkündür. SchoolAndStudents örneği bunu gösterir. Ayrıca, gezinilen sayfanın, sayfaya BindingContext gidilen sayfaya göre ayarlanmış olması da mümkündür.
Özellikler ve yöntem çağrıları
Kalan veri aktarımı örnekleri, bir sayfa başka bir sayfaya gidip geri döndüğünde sayfalar arasında bilgi geçirme sorununu keşfeder. Bu tartışmalarda, giriş sayfası bilgi sayfasına gider ve başlatılan bilgileri bilgi sayfasına aktarması gerekir. Bilgi sayfası, kullanıcıdan ek bilgiler alır ve bilgileri giriş sayfasına aktarır.
Giriş sayfası, bu sayfayı oluşturur oluşturmaz bilgi sayfasındaki genel yöntemlere ve özelliklere kolayca erişebilir. Bilgi sayfası giriş sayfasındaki genel yöntemlere ve özelliklere de erişebilir, ancak bunun için iyi bir zaman seçmek zor olabilir. DateTransfer1 örneği bunu geçersiz kılmada OnDisappearing yapar. Bunun bir dezavantajı, bilgi sayfasının giriş sayfasının türünü bilmesi gerektiğidir.
MessagingCenter
sınıfı, Xamarin.FormsMessagingCenter iki sayfanın birbiriyle iletişim kurması için başka bir yol sağlar. İletiler bir metin dizesiyle tanımlanır ve herhangi bir nesne tarafından eşlik edilebilir.
Belirli bir türden ileti almak isteyen bir programın bir geri çağırma işlevi kullanarak MessagingCenter.Subscribe bunlara abone olması ve belirtmesi gerekir. Daha sonra çağrısı MessagingCenter.Unsubscribeyaparak aboneliğini kaldırabilir. Geri çağırma işlevi, belirtilen türden gönderilen ve yöntemi aracılığıyla Send gönderilen belirtilen ada sahip tüm iletileri alır.
Ekinlikler
Olay, bir sınıfın türünü bilmeden başka bir sınıfa bilgi göndermesi için zamana uygun bir yaklaşımdır. DateTransfer3 örneğinde bilgi sınıfı, bilgiler hazır olduğunda tetikleyen bir olayı tanımlar. Ancak, giriş sayfasının olay işleyicisini ayırması için uygun bir yer yoktur.
Uygulama sınıfı aracı
DateTransfer4 örneği, hem giriş sayfası hem de bilgi sayfası tarafından sınıfta tanımlanan App özelliklere nasıl erişileceğini gösterir. Bu iyi bir çözümdür, ancak sonraki bölümde daha iyi bir şey açıklanmaktadır.
ViewModel'e geçme
Bilgiler için ViewModel kullanmak, giriş sayfasının ve bilgi sayfasının bilgi sınıfının örneğini paylaşmasına olanak tanır. Bu, DateTransfer5 örneğinde gösterilmiştir.
Sayfa durumunu kaydetme ve geri yükleme
Bilgi App sayfası etkinken program uyku moduna geçtiğinde uygulamanın bilgileri kaydetmesi gerektiğinde sınıf aracı veya ViewModel yaklaşımı idealdir. DateTransfer6 örneği bunu gösterir.
Gezinti yığınını kaydetme ve geri yükleme
Genel durumda, uyku moduna geçen çok sayfalı bir program geri yüklendiğinde aynı sayfaya gitmelidir. Bu, böyle bir programın gezinti yığınının içeriğini kaydetmesi gerektiği anlamına gelir. Bu bölümde, bu amaç için tasarlanmış bir sınıfta bu işlemi otomatikleştirme işlemi gösterilmektedir. Bu sınıf, sayfa durumlarını kaydetmelerine ve geri yüklemelerine izin vermek için tek tek sayfaları da çağırır.
Book.Toolkit kitaplığı, sınıfların sözlükteki Properties öğeleri kaydetmek ve geri yüklemek için uygulayabileceği adlı IPersistantPage bir arabirim tanımlar.Xamarin.Forms
MultiPageRestorableApp Book.Toolkit kitaplığındaki Xamarin.Formssınıfı öğesinden Applicationtüretilir. Daha sonra sınıfınızı App öğesinden MultiPageRestorableApp türetebilir ve bazı temizlik işlemleri gerçekleştirebilirsiniz.
StackRestoreDemo, kullanımını MultiPageRestorableAppgösterir.
Gerçek hayattaki bir uygulama gibi bir şey
NoteTaker örneği ayrıca öğesini kullanır MultiPageRestorableApp ve sözlüğe kaydedilen notların girilmesine ve düzenlenmesine Properties izin verir.
