Xamarin.Forms Hızlı başlangıç derinlemesine bakış

Uygulamasında Xamarin.Forms Quickstart Notes uygulaması oluşturulmuştur. Bu makalede, kabuk uygulamalarının nasıl çalıştığı hakkında temel bilgiler hakkında daha fazla bilgiye ulaşmak için nelerin oluşturulduğu incelenir Xamarin.Forms .

Visual Studio giriş

Visual Studio kodu çözümler ve projelerhalinde düzenler. Bir çözüm, bir veya daha fazla projeyi tutabilecek bir kapsayıcıdır. Bir proje, bir uygulama, destekleme kitaplığı, test uygulaması ve daha fazlası olabilir. Notlar uygulaması, aşağıdaki ekran görüntüsünde gösterildiği gibi üç proje içeren bir çözümden oluşur:

Visual Studio Çözüm Gezgini

Projeler şunlardır:

  • Notlar: Bu proje, tüm paylaşılan kod ve paylaşılan kullanıcı arabirimini tutan .NET Standard kitaplığı projem.
  • Notes. Android – bu proje Android 'e özgü kodu barındırır ve Android uygulaması için giriş noktasıdır.
  • Notes. iOS – bu proje iOS 'a özgü kodu barındırır ve iOS uygulaması için giriş noktasıdır.

Uygulamanın anatomumu Xamarin.Forms

Aşağıdaki ekran görüntüsünde, Visual Studio içindeki Not .NET Standard kitaplığı projesinin içerikleri gösterilmektedir:

phoneword .NET Standard Project içerikleri

projenin NuGet ve SDK düğümlerini içeren bir bağımlılıklar düğümü vardır:

  • NuGetXamarin.Essentials projeye eklenmiş olan,, newtonsoft. Json ve sqlite-net-pcl NuGet paketleri.
  • SDK : .NET Standard tanımlayan NuGet paketlerinin tüm kümesine başvuran metapackage.

Mac için Visual Studio giriş

Mac için Visual Studio , çözüm ve projelerekod düzenleme Visual Studio uygulaması izler. Bir çözüm, bir veya daha fazla projeyi tutabilecek bir kapsayıcıdır. Bir proje, bir uygulama, destekleme kitaplığı, test uygulaması ve daha fazlası olabilir. Notlar uygulaması, aşağıdaki ekran görüntüsünde gösterildiği gibi üç proje içeren bir çözümden oluşur:

Mac için Visual Studio çözüm bölmesi

Projeler şunlardır:

  • Notlar: Bu proje, tüm paylaşılan kod ve paylaşılan kullanıcı arabirimini tutan .NET Standard kitaplığı projem.
  • Notes. Android – bu proje Android 'e özgü kodu barındırır ve Android uygulamaları için giriş noktasıdır.
  • Notes. iOS – bu proje iOS 'a özgü kodu barındırır ve iOS uygulamaları için giriş noktasıdır.

Uygulamanın anatomumu Xamarin.Forms

aşağıdaki ekran görüntüsünde, Mac için Visual Studio içindeki not .NET Standard kitaplığı projesinin içerikleri gösterilmektedir:

phoneword .NET Standard kitaplığı Project içerikleri

projenin NuGet ve SDK düğümlerini içeren bir bağımlılıklar düğümü vardır:

  • NuGetXamarin.Essentials projeye eklenmiş olan,, newtonsoft. Json ve sqlite-net-pcl NuGet paketleri.
  • SDK : .NET Standard tanımlayan NuGet paketlerinin tüm kümesine başvuran metapackage.

Proje ayrıca birden çok dosyadan oluşur:

  • Data\notedatabase.cs – Bu sınıf, veritabanını oluşturmak, verileri okumak, verileri yazmak ve verileri veritabanından silmek için kod içerir.
  • Models\note.cs – Bu sınıf , örnekleri uygulamadaki her bir not hakkındaki verileri depolayan bir modeli tanımlar.
  • Views\aboutpage.exe : hakkında bilgi için Kullanıcı arabirimini TANıMLAYAN sınıf için XAML biçimlendirmesi.
  • Views\AboutPage.xaml.cs Kullanıcı sayfayla etkileşime geçtiğinde yürütülen iş mantığını içeren sınıf için arka plan kodu.
  • Views\notpage.exe : uygulama başlatıldığında gösterilen sayfanın Kullanıcı arabirimini TANıMLAYAN sınıf için XAML biçimlendirmesi.
  • Views\NotesPage.xaml.cs Kullanıcı sayfayla etkileşime geçtiğinde yürütülen iş mantığını içeren sınıf için arka plan kodu.
  • Views\noteentrypage.exe : Kullanıcı bir not girdiğinde gösterilen sayfanın Kullanıcı arabirimini TANıMLAYAN sınıf için XAML biçimlendirmesi.
  • Views\NoteEntryPage.xaml.cs Kullanıcı sayfayla etkileşime geçtiğinde yürütülen iş mantığını içeren sınıf için arka plan kodu.
  • App. xaml uygulama için bir kaynak sözlüğü TANıMLAYAN sınıfı için XAML biçimlendirmesi.
  • App. xaml. cs : bir sınıf için, kabuk uygulamasının örnekinden sorumlu olan ve uygulama yaşam döngüsü olaylarını işlemek için bir arka plan kodu.
  • Appshell. xaml uygulamanın görsel hiyerarşisini TANıMLAYAN sınıfı için XAML biçimlendirmesi.
  • Appshell. xaml. csNoteEntryPage programlama yoluyla gezinilebilmesi için bir yol oluşturan sınıfı için arka plan kod.
  • AssemblyInfo. cs – bu dosya, derleme düzeyinde uygulanan proje hakkında bir uygulama özniteliği içerir.

Xamarin. iOS uygulamasının anatomumu hakkında daha fazla bilgi için bkz. bir Xamarin. IOS uygulamasının anatomi. Xamarin. Android uygulamasının anatomi hakkında daha fazla bilgi için bkz. Xamarin. Android uygulamasının anatomi.

Mimari ve uygulama temelleri

Bir Xamarin.Forms uygulama geleneksel bir platformlar arası uygulamayla aynı şekilde tasarlanmıştır. Paylaşılan kod genellikle bir .NET Standard kitaplığına yerleştirilir ve platforma özgü uygulamalar paylaşılan kodu kullanır. Aşağıdaki diyagramda Notlar uygulaması için bu ilişkiye genel bir bakış gösterilmektedir:

Not mimarisi

Başlangıç kodunun yeniden kullanılmasını en üst düzeye çıkarmak için, Xamarin.Forms uygulamalar, App Aşağıdaki kod örneğinde gösterildiği gibi her platformda uygulamanın örneği oluşturulmadan sorumlu adlı tek bir sınıfa sahiptir:

using Xamarin.Forms;

namespace Notes
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();
            MainPage = new AppShell();
        }
        // ...
    }
}

Bu kod, MainPage sınıfının özelliğini nesnesine ayarlar AppAppShell . AppShellSınıfı, uygulamanın görsel hiyerarşisini tanımlar. Shell Bu görsel hiyerarşiyi alır ve kendisi için Kullanıcı arabirimi oluşturur. Uygulamanın görsel hiyerarşisini tanımlama hakkında daha fazla bilgi için bkz. uygulama görsel hiyerarşisi.

Ayrıca, AssemblyInfo. cs dosyası, derleme düzeyinde uygulanan tek bir uygulama özniteliği içerir:

using Xamarin.Forms.Xaml;

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]

XamlCompilationÖzniteliği xaml derleyicisini etkinleştirir, böylece xaml doğrudan ara dile derlenir. Daha fazla bilgi için bkz. xaml derlemesi.

Her platformda uygulamayı başlatın

Her platformda uygulamanın nasıl başlatıldığı platforma özgüdür.

iOS

Xamarin.FormsİOS 'daki ilk sayfayı başlatmak Için Notes. iOS projesi AppDelegate sınıfından devralan sınıfı tanımlar FormsApplicationDelegate :

namespace Notes.iOS
{
    [Register("AppDelegate")]
    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            global::Xamarin.Forms.Forms.Init();
            LoadApplication(new App());
            return base.FinishedLaunching(app, options);
        }
    }
}

FinishedLaunchingGeçersiz kılma, Xamarin.Forms metodu çağırarak çerçeveyi başlatır Init . Bu, Xamarin.Forms kök görünüm denetleyicisi yönteme çağrı tarafından ayarlanmadan önce iOS 'a özgü uygulamasının uygulamaya yüklenmesine neden olur LoadApplication .

Android

Xamarin.FormsAndroid 'de ilk sayfayı başlatmak Için Notes. Android projesi, Activity sınıfından devralan, özniteliğiyle birlikte bir özniteliği oluşturan kodu içerir MainLauncherFormsAppCompatActivity :

namespace Notes.Droid
{
    [Activity(Label = "Notes",
              Icon = "@mipmap/icon",
              Theme = "@style/MainTheme",
              MainLauncher = true,
              ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
    }
}

OnCreateGeçersiz kılma, Xamarin.Forms metodu çağırarak çerçeveyi başlatır Init . Bu, Xamarin.Forms Uygulama yüklenmeden önce Android 'e özgü uygulamasının uygulamaya yüklenmesine neden olur Xamarin.Forms .

Uygulama görsel hiyerarşisi

Xamarin.Forms Kabuk uygulamaları, sınıfının alt sınıfı olan bir sınıfta uygulamanın görsel hiyerarşisini tanımlar Shell . Notlar uygulamasında bu Appshell sınıfdır:

<Shell xmlns="http://xamarin.com/schemas/2014/forms"
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:views="clr-namespace:Notes.Views"
       x:Class="Notes.AppShell">
    <TabBar>
        <ShellContent Title="Notes"
                      Icon="icon_feed.png"
                      ContentTemplate="{DataTemplate views:NotesPage}" />
        <ShellContent Title="About"
                      Icon="icon_about.png"
                      ContentTemplate="{DataTemplate views:AboutPage}" />
    </TabBar>
</Shell>

Bu XAML iki ana nesneden oluşur:

  • TabBar. TabBarAlt sekme çubuğunu temsil eder ve uygulamanın gezinti deseninin alt sekmeleri kullanması durumunda kullanılmalıdır. TabBarNesnesi nesnesinin bir alt öğesidir Shell .
  • ShellContentContentPageiçindeki her bir sekmeye ait nesneleri temsil eder TabBar . Her ShellContent nesne nesnenin bir alt öğesidir TabBar .

Bu nesneler, herhangi bir kullanıcı arabirimini temsil etmez, ancak bunun yerine uygulamanın görsel hiyerarşisinin organizasyonu vardır. Kabuk, bu nesneleri alıp içerik için Gezinti Kullanıcı arabirimini oluşturacak. Bu nedenle, AppShell sınıf, alt sekmeden gezinebilir olan iki sayfayı tanımlar. Sayfalar, gezinmeye yanıt olarak isteğe bağlı olarak oluşturulur.

Kabuk uygulamaları hakkında daha fazla bilgi için bkz Xamarin.Forms Shell ..

Kullanıcı arabirimi

Bir uygulamanın kullanıcı arabirimini oluşturmak için kullanılan birkaç denetim grubu vardır Xamarin.Forms :

  1. Sayfalar Sayfalar platformlar arası mobil uygulama ekranlarını temsil eder. Notes uygulaması, ContentPage tek ekranları göstermek için sınıfını kullanır. Sayfalar hakkında daha fazla bilgi için bkz Xamarin.Forms Pages ..
  2. Görünümler görünümler, Kullanıcı arabiriminde, Etiketler, düğmeler ve metin giriş kutuları gibi görüntülenen denetimlerdir. Tamamlanmış Notlar uygulaması CollectionView ,, Editor ve görünümlerini kullanır Button . Görünümler hakkında daha fazla bilgi için bkz Xamarin.Forms Views ..
  3. Düzenler : düzenler mantıksal yapılara görünümler oluşturmak için kullanılan kapsayıcılardır. Notes uygulaması, StackLayout dikey bir yığında görünümleri düzenlemek için sınıfını ve Grid düğmelerin yatay olarak düzenlenme sınıfını kullanır. Düzenler hakkında daha fazla bilgi için Xamarin.Forms Layouts bkz. .

Çalışma zamanında her denetim, işlenecek olan yerel eşdeğeri ile eşlenecektir.

Layout

Notlar uygulaması, ekran boyutundan bağımsız olarak ekranda görünümleri otomatik olarak düzenleyerek platformlar arası StackLayout uygulama geliştirmeyi basitleştirmek için kullanır. Her alt öğe, eklendiklerine göre yatay veya dikey olarak birbirinin ardından konumlandı. ne kadar alan kullanmayacakları, StackLayout Xamarin_Forms StackLayout _View_HorizontalOptions" data-linktype="absolute-path">ve Xamarin_Forms HorizontalOptions _View_HorizontalOptions" data-linktype="absolute-path">VerticalOptionsStackLayout özelliklerinin nasıl ayarsız olduğuna bağlıdır, ancak varsayılan olarak ekranın tamamını kullanmayı dener.

Aşağıdaki XAML kodu, düzenini bir kullanarak StackLayout bir örneğini NoteEntryPage gösterir:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Notes.Views.NoteEntryPage"
             Title="Note Entry">
    ...    
    <StackLayout Margin="{StaticResource PageMargin}">
        <Editor Placeholder="Enter your note"
                Text="{Binding Text}"
                HeightRequest="100" />
        <Grid>
            ...
        </Grid>
    </StackLayout>    
</ContentPage>

varsayılan olarak StackLayout dikey yönlendirme varsayıyor. Ancak, Xamarin_Forms _StackLayout_Orientation" data-linktype="absolute-path">özelliğini StackLayout.Orientation Xamarin_Forms StackLayout.Orientation _StackOrientation_Horizontal" data-linktype="absolute-path">StackOrientation.Horizontal enumeration üyesi olarak ayararak yatay yönlendirmeye değiştirilebilir.

Not

Görünümlerin boyutu ve özellikleri aracılığıyla HeightRequestWidthRequest ayarlanabilirsiniz.

sınıfı hakkında daha fazla StackLayout bilgi için bkz. Xamarin.Forms StackLayout .

Kullanıcı etkileşimine yanıt verme

XAML'de tanımlanan bir nesne, arka arkasındaki kod dosyasındaki bir olayı sıyrabilir. Aşağıdaki kod örneği, Kaydet düğmesinde çalıştırıldığında olayına yanıt olarak yürütülen sınıfı için arka arkasındaki OnSaveButtonClickedNoteEntryPageClicked kodda OnSaveButtonClicked gösterir.

async void OnSaveButtonClicked(object sender, EventArgs e)
{
    var note = (Note)BindingContext;
    note.Date = DateTime.UtcNow;
    if (!string.IsNullOrWhiteSpace(note.Text))
    {
        await App.Database.SaveNoteAsync(note);
    }
    await Shell.Current.GoToAsync("..");
}

yöntemi OnSaveButtonClicked notunu veritabanına kaydeder ve önceki sayfaya geri döner. Gezinti hakkında daha fazla bilgi için bkz. Gezinti.

Not

XAML sınıfının arka arkasındaki kod dosyası, özniteliğiyle ona atanan adı kullanarak XAML'de tanımlanan bir nesneye x:Name erişebilirsiniz. Bu öznitelike atanan değer, C# değişkenleriyle aynı kurallara sahip olur; bu nedenle bir harf veya alt çizgi ile başlamalı ve eklenmiş boşluk içermeli.

Kaydet düğmesinin yöntemine OnSaveButtonClicked bağlantısı, sınıfı için XAML işaretlemesinde NoteEntryPage gerçekleşir:

<Button Text="Save"
        Clicked="OnSaveButtonClicked" />

Listeler

CollectionView, bir listede öğe koleksiyonunu görüntülemekle sorumludur. Varsayılan olarak, liste öğeleri dikey olarak görüntülenir ve her öğe tek bir satırda görüntülenir.

Aşağıdaki kod örneğinde, CollectionView içinde yer alan örneği ve yer alan kodlar yer alenidir: NotesPage

<CollectionView x:Name="collectionView"
                Margin="{StaticResource PageMargin}"
                SelectionMode="Single"
                SelectionChanged="OnSelectionChanged">
    <CollectionView.ItemsLayout>
        <LinearItemsLayout Orientation="Vertical"
                           ItemSpacing="10" />
    </CollectionView.ItemsLayout>
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <StackLayout>
                <Label Text="{Binding Text}"
                       FontSize="Medium" />
                <Label Text="{Binding Date}"
                       TextColor="{StaticResource TertiaryColor}"
                       FontSize="Small" />
            </StackLayout>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

içindeki her satırın düzeni CollectionView Xamarin_Forms CollectionView _ItemsView_1_ItemTemplate" data-linktype="absolute-path">öğesinde tanımlanır ve uygulama tarafından alınan notları görüntülemek için veri CollectionView.ItemTemplate bağlamayı kullanır. Xamarin_Forms _ItemsView_1_ItemsSource data-linktype="absolute-path">özelliği CollectionView.ItemsSourceCollectionView.ItemsSourceiçinde veri kaynağına ayarlanır:

protected override async void OnAppearing()
{
    base.OnAppearing();

    collectionView.ItemsSource = await App.Database.GetNotesAsync();
}

Bu kod, veritabanında CollectionView depolanan tüm notlarla doldurmakta ve sayfa görüntülendiğinde yürütülür.

içinde bir öğe seçildiğinde CollectionViewSelectionChanged olay etkin olur. adlı bir olay OnSelectionChanged işleyicisi, olay çalıştırılıyorsa yürütülür:

async void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.CurrentSelection != null)
    {
        // ...
    }
}

Olay, SelectionChanged öğesiyle ilişkili nesneye özelliği aracılığıyla e.CurrentSelection erişebilirsiniz.

sınıfı hakkında daha fazla CollectionView bilgi için bkz. Xamarin.Forms CollectionView .

Gezinti, gidilen bir URI belirterek Kabuk uygulamasında gerçekleştirilir. Gezinti URL'leri üç bileşenden oluşur:

  • Kabuk görselhiyerarşisinin bir parçası olarak var olan içeriğin yolunu tanımlayan bir yol.
  • Bir sayfa. Kabuk görsel hiyerarşisinde mevcut olmayan sayfalar, kabuk uygulamasının herhangi bir yerinden gezinti yığınına itilir. Örneğin , NoteEntryPage Kabuk görsel hiyerarşisinde tanımlanmamıştır, ancak gerektiğinde gezinti yığınına da itilir.
  • Bir veya daha fazla sorgu parametresi. Sorgu parametreleri, gezinirken hedef sayfaya geçirilebilir parametrelerdir.

Gezinti URI'sine üç bileşenin de dahil olması gerekir, ancak yapı şu şekildedir: //route/page?queryParameters

Not

Yollar, özelliği aracılığıyla Kabuk görsel hiyerarşisi öğelerinde Route tanımlanabilir. Ancak, Route özellik, Notlar uygulamasında olduğu gibi ayarlanmasa çalışma zamanında bir yol oluşturulur.

Kabuk gezintisi hakkında daha fazla bilgi için Xamarin.Forms Shell navigation bkz. .

Yolları kaydetme

Kabuk görsel hiyerarşisinde mevcut olmayan bir sayfaya gitmek için önce Kabuk yönlendirme sistemine kayıtlı olması gerekir. yöntemini Routing.RegisterRoute kullanarak. Notlar uygulamasında bu, oluşturucuda AppShell gerçekleşir:

public partial class AppShell : Shell
{
    public AppShell()
    {
        // ...
        Routing.RegisterRoute(nameof(NoteEntryPage), typeof(NoteEntryPage));
    }
}

Bu örnekte, adlı bir NoteEntryPage yol türüne göre NoteEntryPage kaydedilir. Bu sayfa, uygulamanın herhangi bir yerinde URI tabanlı gezinti kullanarak sayfasına gidebilir.

Gezinti gerçekleştirme

Gezinti yöntemi tarafından GoToAsync gerçekleştirilir ve bu yöntem, gidilen yolu temsil eden bir bağımsız değişkeni kabul eder:

await Shell.Current.GoToAsync("NoteEntryPage");

Bu örnekte , NoteEntryPage olarak gidildi.

Önemli

Kabuk görsel hiyerarşisinde yer alan bir sayfaya gidilen gezinti yığını oluşturulur.

Bir sayfaya gezinirken veriler sorgu parametresi olarak sayfaya geçirilebilir:

async void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.CurrentSelection != null)
    {
        // Navigate to the NoteEntryPage, passing the ID as a query parameter.
        Note note = (Note)e.CurrentSelection.FirstOrDefault();
        await Shell.Current.GoToAsync($"{nameof(NoteEntryPage)}?{nameof(NoteEntryPage.ItemId)}={note.ID.ToString()}");
    }
}

Bu örnek, içinde seçili olan öğeyi almakta ve özelliğine sorgu parametresi olarak geçirilen nesnesinin özelliğinin değeriyle birlikte CollectionViewNoteEntryPageIDNote 'ye NoteEntryPage.ItemId gidmektedir.

Geçirilen verileri almak için sınıfı NoteEntryPage ile birlikte QueryPropertyAttribute

[QueryProperty(nameof(ItemId), nameof(ItemId))]
public partial class NoteEntryPage : ContentPage
{
    public string ItemId
    {
        set
        {
            LoadNote(value);
        }
    }
    // ...
}

için ilk bağımsız değişken, özelliğin geçirilen verileri, ikinci bağımsız değişkeni ise sorgu parametresi kimliğini QueryPropertyAttributeItemId belirterek alır. Bu nedenle, yukarıdaki örnekte özelliğin yöntem çağrısında URI'den sorgu parametresinde geçirilen QueryPropertyAttributeItemId verileri ItemIdGoToAsync aldıracak olduğunu belirtir. ardından ItemId özelliği, LoadNote cihazdan notu almak için yöntemini çağırmaktadır.

Geriye doğru gezinti, yöntemine bağımsız değişken olarak ".." belirterek GoToAsync gerçekleştirilir:

await Shell.Current.GoToAsync("..");

Geriye doğru gezinti hakkında daha fazla bilgi için bkz. Geriye doğru gezinti.

Veri bağlama

Veri bağlama, bir uygulamanın verilerini görüntüleme Xamarin.Forms ve verilerle etkileşim kurma sürecini basitleştirmek için kullanılır. Kullanıcı arabirimi ile temel alınan uygulama arasında bir bağlantı kurulur. sınıfı, BindableObject veri bağlamayı destekleyecek altyapının büyük birını içerir.

Veri bağlama, kaynak ve hedef adlı iki nesne bağlar. Kaynak nesnesi verileri sağlar. Hedef nesne, kaynak nesneden verileri tüketir (ve genellikle görüntüler). Örneğin, Editor bir (Editor nesne) genellikle Xamarin_Forms _InputView_Text" data-linktype="absolute-path">özelliğini kaynak nesnesinde genel bir TextstringText Aşağıdaki diyagramda bağlama ilişkisi göstermektedir:

Veri Bağlama

Veri bağlamanın temel avantajı, artık görünümleriniz ve veri kaynağınız arasında verileri eşitleme konusunda endişelenmenize gerek kalmamadır. Kaynak nesnede yapılan değişiklikler bağlama çerçevesi tarafından otomatik olarak arka sahnenin arkasındaki hedef nesneye eklenir ve hedef nesnede yapılan değişiklikler isteğe bağlı olarak kaynak nesneye geri geri geri ertelenebilirsiniz.

Veri bağlamayı kurmak iki adımlı bir işlemdir:

Notes uygulamasında bağlama hedefi bir not görüntüleyen Editor hedeftir. Note Örnek, Xamarin_Forms Editor _BindableObject_BindingContext" data-linktype="absolute-path">BindingContext olarak ayarlanmıştır. NoteEntryPage Başlangıçta, BindingContext sayfa NoteEntryPage oluşturucusu yürütülürken ile ayarlanır:

public NoteEntryPage()
{
    // ...
    BindingContext = new Note();
}

Bu örnekte, sayfa BindingContext oluşturulduğunda sayfasının yeni Note bir olarak NoteEntryPage ayarlanmıştır. Bu, uygulamaya yeni bir not ekleme senaryosunu ele almaktadır.

Buna ek olarak, üzerinde mevcut bir not seçilmiş olması şartıyla, gezinti gerçekleşirken sayfanın BindingContextNoteEntryPage da ayarlandırabilirsiniz: NotesPage

[QueryProperty(nameof(ItemId), nameof(ItemId))]
public partial class NoteEntryPage : ContentPage
{
    public string ItemId
    {
        set
        {
            LoadNote(value);
        }

        async void LoadNote(string itemId)
        {
            try
            {
                int id = Convert.ToInt32(itemId);
                // Retrieve the note and set it as the BindingContext of the page.
                Note note = await App.Database.GetNoteAsync(id);
                BindingContext = note;
            }
            catch (Exception)
            {
                Console.WriteLine("Failed to load note.");
            }
        }    
        // ...    
    }
}

Bu örnekte, sayfa gezintisi oluştuğunda, sayfanın nesnesi veritabanından alındıktan BindingContextNote sonra seçili nesneye ayarlanır.

Önemli

Her Xamarin_Forms _BindableObject_BindingContext data-linktype="absolute-path">özelliği tek tek ayarlansa BindingContext da, bu gerekli değildir. BindingContext BindingContext , tüm üstleri tarafından devralınan özel bir özelliktir. Bu nedenle, üzerinde bir örnek olarak ayarlanırsa, tüm children aynı BindingContext olur ve nesnenin ortak ContentPageNoteContentPageBindingContext özelliklerine Note bağlanabilir.

Editorardından NoteEntryPage içinde nesnesi Text nesnesinin özelliğine Note bağlar:

<Editor Placeholder="Enter your note"
        Text="{Binding Text}" />

Xamarin_Forms _InputView_Text" data-linktype="absolute-path">özelliği ile kaynak nesnenin özelliği Editor.TextText arasında bir bağlama Editor.Text kurulur. içinde yapılan Editor değişiklikler otomatik olarak nesnesine Note yayılır. Benzer şekilde, özelliğinde değişiklikler Note.Text yapılırsa bağlama Xamarin.Forms altyapısı da içeriğini Editor güncelleştirecek. Bu, iki yollı bağlama olarak bilinir.

Veri bağlama hakkında daha fazla bilgi için Xamarin.Forms Data Binding bkz. .

Stil oluşturma

Xamarin.Forms uygulamaları genellikle aynı görünüme sahip birden çok görsel öğe içerir. Her görsel öğenin görünümünü ayarlama tekrar tekrar olabilir ve hataya açık olabilir. Bunun yerine, görünümünü tanımlayan ve ardından gerekli görsel öğelere uygulanan stiller oluşturulabilir.

StyleSınıfı, bir özellik değerleri koleksiyonunu, daha sonra birden çok görsel öğe örneğine uygulanabilen bir nesne halinde gruplandırır. Stiller ResourceDictionary , uygulama düzeyinde, sayfa düzeyinde ya da görünüm düzeyinde bir içinde depolanır. Kullanılabilecek bir etkilerin nerede tanımlanacağını seçme Style :

  • Style uygulama düzeyinde tanımlanan örnekler uygulamanın tamamında uygulanabilir.
  • Style sayfa düzeyinde tanımlanan örnekler sayfaya ve alt öğelerine uygulanabilir.
  • Style görünüm düzeyinde tanımlanan örnekler görünüme ve alt öğelerine uygulanabilir.

Önemli

Uygulamanın tamamında kullanılan tüm stiller, çoğaltmayı önlemek için uygulamanın kaynak sözlüğünde depolanır. Ancak, bir sayfaya özgü XAML, uygulamanın kaynak sözlüğüne dahil edilmemelidir, daha sonra kaynaklar bir sayfa için gerektiğinde uygulama başlangıcında ayrıştırılacaktır. Daha fazla bilgi için bkz. Uygulama kaynağı sözlüğü boyutunu azaltma.

Her Style örnek bir veya daha fazla nesne koleksiyonu içerir Setter , her biri Setter bir Xamarin_Forms Style _Setter_Property "Data-LinkType =" Absolute-path ">Property ve bir Xamarin_Forms Setter _Setter_Value" data-LinkType = "Absolute-path" >Value . , Property Stilin uygulandığı öğenin bağlanabilir özelliğinin adıdır ve Value özelliği, özelliğine uygulanan değerdir... Aşağıdaki kod örneği, öğesinden bir stil göstermektedir NoteEntryPage :

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Notes.Views.NoteEntryPage"
             Title="Note Entry">
    <ContentPage.Resources>
        <!-- Implicit styles -->
        <Style TargetType="{x:Type Editor}">
            <Setter Property="BackgroundColor"
                    Value="{StaticResource AppBackgroundColor}" />
        </Style>
        ...
    </ContentPage.Resources>
    ...
</ContentPage>

Bu stil sayfadaki tüm örneklere uygulanır Editor .

Bir oluştururken Style , Xamarin_Forms Style _Style_TargetType "Data-LinkType =" Absolute-path ">TargetType özelliği her zaman gereklidir.

Not

Uygulamanın stillendirme Xamarin.Forms , genellıkle xaml stilleri kullanılarak gerçekleştirilir. Ancak, Xamarin.Forms geçişli stil sayfaları (CSS) kullanarak görsel öğelerin stillendirilmesini de destekler. Daha fazla bilgi için bkz. Styling Xamarin.Forms apps using Cascading Style Sheets (CSS).

XAML stilleri hakkında daha fazla bilgi için bkz Styling Xamarin.Forms Apps using XAML Styles ..

Test ve dağıtım

Mac için Visual Studio ve Visual Studio her ikisi de bir uygulamayı test etmek ve dağıtmak için birçok seçenek sağlar. Uygulamalarda hata ayıklama uygulama geliştirme yaşam döngüsünün yaygın bir parçasıdır ve kod sorunlarının tanılanmasına yardımcı olur. Daha fazla bilgi için bkz. günlük penceresine kesme noktası, kod adım adımve çıkış bilgileriayarlama.

Simülatörleri, bir uygulamayı dağıtmaya ve test etmeye başlamak için iyi bir yerdir ve uygulamaları test etmek için kullanışlı işlevler sağlar. Ancak, kullanıcılar son uygulamayı benzeticide tüketmez, bu nedenle uygulamaların gerçek cihazlarda erken ve sık test edilmelidir. İOS cihaz sağlama hakkında daha fazla bilgi için bkz. cihaz sağlama. Android cihaz sağlama hakkında daha fazla bilgi için bkz. cihazı geliştirme Için ayarlama.

Sonraki adımlar

Bu derin, kabuk kullanılarak uygulama geliştirmenin temellerini inceledi Xamarin.Forms . Önerilen sonraki adımlar aşağıdaki işlevleri okumayı içerir:

  • Xamarin.Forms Kabuk, çoğu mobil uygulamanın gerektirdiği temel özellikleri sağlayarak mobil uygulama geliştirmenin karmaşıklığını azaltır. Daha fazla bilgi için bkz. Xamarin.Forms Shell.
  • Bir uygulamanın kullanıcı arabirimini oluşturmak için kullanılan çeşitli denetim grupları vardır Xamarin.Forms . Daha fazla bilgi için bkz. Denetim Başvurusu.
  • Veri bağlama, iki nesnenin özelliklerini birbirine bağlayarak özelliklerden birinde yapılan değişikliklerin otomatik olarak diğer özelliğe de yansıtılmasını sağlayan bir tekniktir. Daha fazla bilgi için bkz. Veri Bağlama.
  • Xamarin.Forms kullanılan sayfa türüne bağlı olarak birden çok sayfa gezintisi deneyimi sağlar. Daha fazla bilgi için bkz. Gezinti.
  • Stiller, işaretleme tekrarından kaçınılmasına yardımcı olur ve uygulamaların görünümünün daha kolay değiştirilmesini sağlar. Daha fazla bilgi için bkz. Styling Xamarin.Forms Apps.
  • Veri şablonları, desteklenen görünümlerde veri sunumunun tanımlanmasını sağlar. Daha fazla bilgi için bkz. Veri Şablonları.
  • Efektler, her bir platformdaki yerel denetimlerin özelleştirilmesini sağlar. Etkiler, altsınıflama sınıfı tarafından platforma özgü projelerde oluşturulur PlatformEffect ve bunları uygun bir denetime ekleyerek tüketilir Xamarin.Forms . Daha fazla bilgi için bkz. Efektler.
  • Her sayfa, düzen ve görünüm her platformda farklı bir şekilde oluşturulur ve Renderer sınıfı kullanıldığında yerel denetim oluşturulur, ekranda düzeni ayarlanır ve belirtilen davranış paylaşılan koda eklenir. Geliştiriciler, kendi özel Renderer sınıflarını uygulayarak denetimlerin görünümünü ve/veya davranışını özelleştirebilir. Daha fazla bilgi için bkz. Özel Oluşturucular.
  • Paylaşılan kod, DependencyService sınıfıyla yerel işlevlere erişebilir. Daha fazla bilgi için bkz. DependencyService ile Yerel Özelliklere Erişme.

Channel 9 ve YouTube'da daha fazla Xamarin videoları bulun.