Gezinti Sayfası

.NET MAUI NavigationPage.

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI), NavigationPage sayfalarda, ileri ve gerilerde istediğiniz gibi gezinebileceğiniz hiyerarşik bir gezinti deneyimi sağlar. NavigationPage , nesnelerin son gelen ilk çıkışı (LIFO) yığını Page olarak gezinti sağlar.

NavigationPage aşağıdaki özellikleri tanımlar:

  • BarBackgroundtüründe Brush, gezinti çubuğunun arka planını olarak Brushbelirtir.
  • BarBackgroundColortüründe Color, gezinti çubuğunun arka plan rengini belirtir.
  • BackButtonTitle, türünde string, geri düğmesi için kullanılacak metni temsil eder. Bu ekli bir özelliktir.
  • BarTextColortüründe Color, gezinti çubuğundaki metnin rengini belirtir.
  • CurrentPagetüründe Page, gezinti yığınının üstündeki sayfayı temsil eder. Bu salt okunur bir özelliktir.
  • HasNavigationBar, türünde bool, üzerinde bir gezinti çubuğunun NavigationPagebulunup bulunmadığını temsil eder. Bu özelliğin varsayılan değeridir true. Bu ekli bir özelliktir.
  • HasBackButton, türündeki boolgezinti çubuğunun geri düğmesi içerip içermediğini gösterir. Bu özelliğin varsayılan değeridir true. Bu ekli bir özelliktir.
  • IconColortüründe Color, gezinti çubuğundaki simgenin arka plan rengini tanımlar. Bu ekli bir özelliktir.
  • RootPage, türündeki Pagegezinti yığınının kök sayfasını temsil eder. Bu salt okunur bir özelliktir.
  • TitleIconImageSourcetüründe ImageSource, gezinti çubuğundaki başlığı temsil eden simgeyi tanımlar. Bu ekli bir özelliktir.
  • TitleViewtüründe View, gezinti çubuğunda görüntülenebilen görünümü tanımlar. Bu ekli bir özelliktir.

Bu özellikler nesneler tarafından BindableProperty desteklenir; bu da veri bağlamalarının hedefleri olabileceği ve stillendirilebileceği anlamına gelir.

NavigationPage sınıfı ayrıca üç olay tanımlar:

  • Pushed bir sayfa gezinti yığınına gönderildiğinde oluşturulur.
  • Popped , gezinti yığınından bir sayfa açıldığında oluşturulur.
  • PoppedToRoot , gezinti yığınından kök olmayan son sayfa açıldığında oluşturulur.

Üç olay da, gezinti yığınından açılan sayfayı veya yığında yeni görünen sayfayı alan salt okunur Page bir özellik tanımlayan nesneleri alırNavigationEventArgs.

Uyarı

NavigationPage .NET MAUI Shell uygulamalarıyla uyumsuzdur ve bir Shell uygulamasında kullanmaya NavigationPage çalışırsanız bir özel durum oluşur. Shell uygulamaları hakkında daha fazla bilgi için bkz . Shell.

Modsuz gezinti gerçekleştirme

.NET MAUI, modeless page navigation'ı destekler. Modsuz bir sayfa ekranda kalır ve siz başka bir sayfaya gidinceye kadar kullanılabilir durumda kalır.

genellikle NavigationPage bir nesne yığınında ContentPage gezinmek için kullanılır. Bir sayfa diğerine geçtiğinde, yeni sayfa yığına gönderilir ve etkin sayfa olur:

Pushing a page to the navigation stack.

İkinci sayfa ilk sayfaya geri döndüğünde, yığından bir sayfa açılır ve en üstteki yeni sayfa etkin hale gelir:

Popping a page from the navigation stack.

, NavigationPage etkin sayfanın gezinti çubuğunun altında görüntülendiği bir gezinti çubuğundan oluşur. Aşağıdaki diyagramda gezinti çubuğunun ana bileşenleri gösterilmektedir:

NavigationPage components.

Geri düğmesi ile başlık arasında isteğe bağlı bir simge görüntülenebilir.

Gezinti yöntemleri, türetilmiş türlerdeki Page özelliği tarafından Navigation kullanıma sunulur. Bu yöntemler, sayfaları gezinti yığınına gönderme, sayfaları yığından çekme ve yığını işleme olanağı sağlar.

Bahşiş

yalnızca nesnelerle ContentPage doldurulması önerilirNavigationPage.

Kök sayfayı oluşturma

Birden çok sayfa etrafında yapılandırılmış bir uygulamanın her zaman gezinti yığınına eklenen ilk sayfa olan bir kök sayfası vardır. Bu, oluşturucu bağımsız değişkeni uygulamanın kök sayfası olan bir NavigationPage nesne oluşturarak ve sonuçta elde edilen nesneyi özelliğin App.MainPage değeri olarak ayarlayarak gerçekleştirilir:

public partial class App : Application
{
    public App()
    {
        InitializeComponent();
        MainPage = new NavigationPage(new MainPage());
    }
}

Dekont

RootPage özelliğiNavigationPage, gezinti yığınındaki ilk sayfaya erişim sağlar.

Sayfaları gezinti yığınına gönderme

Geçerli sayfanın özelliğinde PushAsyncNavigation yöntemi çağrılarak bir sayfaya gidilebilir:

await Navigation.PushAsync(new DetailsPage());

Bu örnekte, DetailsPage nesne gezinti yığınına gönderilir ve burada etkin sayfa olur.

Dekont

yönteminde PushAsync , gezinti sırasında sayfa geçişinin görüntülenip görüntülenmeyeceğini belirten bir bool bağımsız değişken içeren bir geçersiz kılma vardır. PushAsync Bağımsız değişkeni olmayan bool yöntem, sayfa geçişini varsayılan olarak etkinleştirir.

Gezinti yığınından açılan sayfalar

Etkin sayfa, cihazın fiziksel düğmesi mi yoksa ekran düğmesi mi olduğuna bakılmaksızın bir cihazda Geri düğmesine basılarak gezinti yığınından açılır.

Program aracılığıyla önceki sayfaya dönmek için yöntemi PopAsync geçerli sayfanın özelliğinde Navigation çağrılmalıdır:

await Navigation.PopAsync();

Bu örnekte, geçerli sayfa gezinti yığınından kaldırılır ve en üstteki yeni sayfa etkin sayfa olur.

Dekont

yönteminde PopAsync , gezinti sırasında sayfa geçişinin görüntülenip görüntülenmeyeceğini belirten bir bool bağımsız değişken içeren bir geçersiz kılma vardır. PopAsync Bağımsız değişkeni olmayan bool yöntem, sayfa geçişini varsayılan olarak etkinleştirir.

Buna ek olarak, Navigation her sayfanın özelliği, gezinti yığınındaki kök sayfa dışında tümünü gösteren bir PopToRootAsync yöntem de sunar ve bu nedenle uygulamanın kök sayfasını etkin sayfa haline getirir.

Gezinti yığınını işleme

Navigation özelliğiPage, gezinti yığınındaki sayfaların alınabildiği bir NavigationStack özelliği kullanıma sunar. .NET MAUI gezinti yığınına erişimi korurken, Navigation özelliği sayfaları ekleyerek veya kaldırarak yığını işlemek için ve RemovePage yöntemlerini sağlarInsertPageBefore.

yöntemi, InsertPageBefore aşağıdaki diyagramda gösterildiği gibi, belirtilen bir sayfayı mevcut belirtilen sayfadan önce gezinti yığınına ekler:

Inserting a page in the navigation stack.

yöntemi, RemovePage aşağıdaki diyagramda gösterildiği gibi belirtilen sayfayı gezinti yığınından kaldırır:

Removing a page from the navigation stack.

Bu yöntemler birlikte, başarılı bir oturum açma sonrasında oturum açma sayfasını yeni bir sayfayla değiştirme gibi özel bir gezinti deneyimi sağlar.

Kalıcı gezinti gerçekleştirme

.NET MAUI kalıcı sayfa gezintiyi destekler. Kalıcı bir sayfa, kullanıcıların görev tamamlanana veya iptal edilene kadar kendi kendine gezinilemeyen bir görevi tamamlamalarını teşvik eder.

Kalıcı sayfa, .NET MAUI tarafından desteklenen sayfa türlerinden herhangi biri olabilir. Bir sayfayı modlu olarak görüntülemek için uygulama sayfayı kalıcı yığına göndererek etkin sayfaya dönüşmelidir:

Pushing a page to the modal stack.

Önceki sayfaya dönmek için uygulamanın geçerli sayfayı kalıcı yığından açması gerekir ve en üstteki yeni sayfa etkin sayfa olur:

Popping a page from the modal stack.

Kalıcı gezinti yöntemleri, türetilmiş türlerdeki Page özelliği tarafından Navigation kullanıma sunulur. Bu yöntemler, sayfaları kalıcı yığına ve pop sayfalarını kalıcı yığından gönderme olanağı sağlar. özelliği Navigation , kalıcı yığındaki sayfaların alınabildiği bir ModalStack özelliği de kullanıma sunar. Ancak, kalıcı yığın işleme gerçekleştirme veya kalıcı gezintide kök sayfaya giriş yapma kavramı yoktur. Bunun nedeni, bu işlemlerin temel platformlarda evrensel olarak desteklenmemesidir.

Dekont

NavigationPage Kalıcı sayfa gezintisi gerçekleştirmek için nesne gerekli değildir.

Sayfaları kalıcı yığına gönderme

Geçerli sayfanın özelliğinde PushModalAsyncNavigation yöntemi çağrılarak bir sayfaya mod aracılığıyla gidilebilir:

await Navigation.PushModalAsync(new DetailsPage());

Bu örnekte nesne, DetailsPage etkin sayfa haline geldiği kalıcı yığına gönderilir.

Dekont

yönteminde PushModalAsync , gezinti sırasında sayfa geçişinin görüntülenip görüntülenmeyeceğini belirten bir bool bağımsız değişken içeren bir geçersiz kılma vardır. PushModalAsync Bağımsız değişkeni olmayan bool yöntem, sayfa geçişini varsayılan olarak etkinleştirir.

Kalıcı yığından açılan sayfalar

Etkin sayfa, cihazdaki fiziksel bir düğme mi yoksa ekran düğmesi mi olduğuna bakılmaksızın bir cihazdaki Geri düğmesine basılarak kalıcı yığından açılır.

Program aracılığıyla özgün sayfaya dönmek için yöntemi PopModalAsync geçerli sayfanın özelliğinde Navigation çağrılmalıdır:

await Navigation.PopModalAsync();

Bu örnekte geçerli sayfa kalıcı yığından kaldırılır ve en üstteki yeni sayfa etkin sayfa olur.

Dekont

yönteminde PopModalAsync , gezinti sırasında sayfa geçişinin görüntülenip görüntülenmeyeceğini belirten bir bool bağımsız değişken içeren bir geçersiz kılma vardır. PopModalAsync Bağımsız değişkeni olmayan bool yöntem, sayfa geçişini varsayılan olarak etkinleştirir.

Geri düğmesini devre dışı bırakma

Android'de, cihazdaki standart Geri düğmesine basarak her zaman önceki sayfaya dönebilirsiniz. Kalıcı sayfanın sayfadan ayrılmadan önce kendi içinde bir görevin tamamlanması gerekiyorsa, uygulamanın Geri düğmesini devre dışı bırakması gerekir. Bu, kalıcı sayfadaki yöntemi geçersiz kılarak Page.OnBackButtonPressed gerçekleştirilebilir.

Gezinti sırasında veri geçirme

Bazen bir sayfanın gezinti sırasında verileri başka bir sayfaya geçirmesi gerekir. Bunu yapmak için iki standart teknik, verileri bir sayfa oluşturucusunun içinden geçirmek ve yeni sayfaları BindingContext verilere ayarlamaktır.

Sayfa oluşturucudan veri geçirme

Gezinti sırasında verileri başka bir sayfaya geçirmenin en basit tekniği, sayfa oluşturucu bağımsız değişkenidir:

Contact contact = new Contact
{
    Name = "Jane Doe",
    Age = 30,
    Occupation = "Developer",
    Country = "USA"
};
...
await Navigation.PushModalAsync(new DetailsPage(contact));

Bu örnekte, bir Contact nesne öğesine DetailPageoluşturucu bağımsız değişkeni olarak geçirilir. Nesne Contact daha sonra tarafından DetailsPagegörüntülenebilir.

BindingContext aracılığıyla veri geçirme

Gezinti sırasında verileri başka bir sayfaya geçirmek için alternatif bir yaklaşım, yeni sayfaları BindingContext verilere ayarlamaktır:

Contact contact = new Contact
{
    Name = "Jane Doe",
    Age = 30,
    Occupation = "Developer",
    Country = "USA"
};

await Navigation.PushAsync(new DetailsPage
{
    BindingContext = contact  
});

Gezinti verilerini bir sayfanın BindingContext verileri aracılığıyla geçirmenin avantajı, yeni sayfanın verileri görüntülemek için veri bağlamayı kullanabilmesidir:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyMauiApp.DetailsPage"
             Title="Details">
    <StackLayout>
        <Label Text="{Binding Name}" />
        <Label Text="{Binding Occupation}" />
    </StackLayout>
</ContentPage>

Veri bağlama hakkında daha fazla bilgi için bkz . Veri bağlama.

Gezinti çubuğunda görünümleri görüntüleme

Herhangi bir .NET MAUI View , bir NavigationPageöğesinin gezinti çubuğunda görüntülenebilir. Bu, ekli özelliği olarak Viewayarlanarak NavigationPage.TitleView gerçekleştirilir. Bu ekli özellik herhangi bir Pageüzerinde ayarlanabilir ve öğesi üzerine NavigationPageNavigationPage gönderildiğinde Page özelliğin değerine saygı gösterir.

Aşağıdaki örnekte, ekli özelliğin NavigationPage.TitleView nasıl ayarlanacağı gösterilmektedir:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="NavigationPageTitleView.TitleViewPage">
    <NavigationPage.TitleView>
        <Slider HeightRequest="44"
                WidthRequest="300" />
    </NavigationPage.TitleView>
    ...
</ContentPage>

Eşdeğer C# kodu:

Slider titleView = new Slider { HeightRequest = 44, WidthRequest = 300 };
NavigationPage.SetTitleView(this, titleView);

Bu örnekte, yakınlaştırmayı denetlemek için öğesinin NavigationPagegezinti çubuğunda bir Slider görüntülenir.

Önemli

Görünümün boyutu ve HeightRequest özellikleriyle WidthRequest belirtilmediği sürece birçok görünüm gezinti çubuğunda görünmez.

sınıfı sınıfından LayoutView türetildiğinden TitleView , ekli özellik birden çok görünüm içeren bir düzen sınıfını görüntüleyecek şekilde ayarlanabilir. Ancak, gezinti çubuğunda görüntülenen görünüm gezinti çubuğunun varsayılan boyutundan büyükse bu kırpmaya neden olabilir. Ancak Android'de, bağlanabilir özellik yeni yüksekliği temsil eden bir double olarak ayarlanarak NavigationPage.BarHeight gezinti çubuğunun yüksekliği değiştirilebilir.

Alternatif olarak, içeriğin bir kısmını gezinti çubuğuna, bazılarını sayfa içeriğinin en üstündeki gezinti çubuğuyla eşleştirdiğiniz bir görünüme yerleştirerek genişletilmiş gezinti çubuğu önerilebilir. Buna ek olarak, iOS'ta, gezinti çubuğunun en altındaki ayırıcı çizgi ve gölge, bağlanabilir özellik trueolarak ayarlanarak NavigationPage.HideNavigationBarSeparator kaldırılabilir.

Bahşiş

BackButtonTitle, Title, TitleIconImageSourceve TitleView özelliklerinin tümü gezinti çubuğunda yer kaplayan değerleri tanımlayabilir. Gezinti çubuğu boyutu platforma ve ekran boyutuna göre farklılık gösterse de, bu özelliklerin tümünün ayarlanması, kullanılabilir alanın sınırlı olması nedeniyle çakışmalara neden olur. Bu özelliklerin bir bileşimini kullanmaya çalışmak yerine, yalnızca özelliğini ayarlayarak istediğiniz gezinti çubuğu tasarımına daha iyi ulaşabileceğinizi TitleView fark edebilirsiniz.