Aracılığıyla paylaş


Bölüm 7'nin özeti. XAML ve kod karşılaştırması

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.

Xamarin.Forms Genişletilebilir Uygulama Biçimlendirme Dili veya XAML ("zammel" olarak okunur) adlı XML tabanlı işaretleme dilini destekler. XAML, bir Xamarin.Forms uygulamanın kullanıcı arabiriminin düzenini ve kullanıcı arabirimi öğeleri ile temel alınan veriler arasındaki bağlamaları tanımlamada C# için bir alternatif sağlar.

Özellikler ve öznitelikler

Xamarin.Forms sınıflar ve yapılar XAML'de XML öğelerine, bu sınıfların ve yapıların özellikleri ise XML özniteliklerine dönüşür. XAML'de örnek oluşturulabilmesi için bir sınıfın genel olarak parametresiz oluşturucuya sahip olması gerekir. XAML'de ayarlanan tüm özelliklerin ortak set erişimcileri olmalıdır.

XAML ayrıştırıcısı, temel veri türlerinin (string, double, boolvb.) özellikleri için öznitelik ayarlarını bu türlere dönüştürmek için standart TryParse yöntemleri kullanır. XAML ayrıştırıcısı numaralandırma türlerini de kolayca işleyebilir ve numaralandırma türü özniteliğiyle işaretlenmişse numaralandırma üyelerini Flags birleştirebilir.

XAML ayrıştırıcısına yardımcı olmak için, daha karmaşık türler (veya bu türlerin özellikleri), dize değerlerinden bu türlere dönüştürmeyi destekleyen bir TypeConverter sınıfı tanımlayan bir TypeConverterAttribute içerebilir. Örneğin, ColorTypeConverter "#rrggbb" gibi renk adlarını ve dizeleri değerlere Color dönüştürür.

Özellik öğesi söz dizimi

XAML'de sınıflar ve onlardan oluşturulan nesneler XML öğeleri olarak ifade edilir. Bunlar nesne öğeleri olarak bilinir. Bu nesnelerin özelliklerinin çoğu XML öznitelikleri olarak ifade edilir. Bunlara özellik öznitelikleri adı verilir.

Bazen bir özellik, basit bir dize olarak ifade edilemeyen bir nesneye ayarlanmalıdır. Böyle bir durumda, XAML bir nokta ile ayrılmış sınıf adı ve özellik adından oluşan özellik öğesi olarak adlandırılan bir etiketi destekler. Bir nesne öğesi daha sonra bir özellik öğesi etiketi çifti içinde görünebilir.

Projenize XAML sayfası ekleme

Xamarin.Forms Taşınabilir Sınıf Kitaplığı ilk oluşturulduğunda bir XAML sayfası içerebilir veya var olan bir projeye XAML sayfası ekleyebilirsiniz. Yeni öğe eklemek için iletişim kutusunda XAML sayfasına veya ContentPage XAML'ye başvuran öğeyi seçin. (. ContentView)

Not

Bu bölüm yazıldıktan sonra Visual Studio seçenekleri değişti.

İki dosya oluşturulur: dosya adı uzantısı .xaml olan bir XAML dosyası ve .xaml.cs uzantısına sahip bir C# dosyası. C# dosyası genellikle XAML dosyasının arkasındaki kod olarak adlandırılır. Arka planda kod dosyası, öğesinden ContentPagetüretilen kısmi bir sınıf tanımıdır. Derleme zamanında XAML ayrıştırılır ve aynı sınıf için başka bir kısmi sınıf tanımı oluşturulur. Oluşturulan bu sınıf, arka planda kod dosyasının oluşturucusundan çağrılan adlı InitializeComponent bir yöntem içerir.

Çalışma zamanı sırasında, çağrının InitializeComponent sonunda, XAML dosyasının tüm öğeleri C# kodunda oluşturulmuş gibi örneklendi ve başlatıldı.

XAML dosyasındaki kök öğesi şeklindedir ContentPage. Kök etiketi, biri öğeler için, diğeri ise tüm XAML uygulamalarına Xamarin.Forms ilişkin öğeler ve öznitelikler için bir x ön ek tanımlayan en az iki XML ad alanı bildirimi içerir. Kök etiketi, öğesinden ContentPagetüretilen sınıfın ad alanını ve adını belirten bir x:Class öznitelik de içerir. Bu, arka planda kod dosyasındaki ad alanı ve sınıf adıyla eşleşir.

XAML ve kod birleşimi CodePlusXaml örneği tarafından gösterilmiştir.

XAML derleyicisi

Xamarin.Forms bir XAML derleyicisine sahiptir, ancak kullanımı, XamlCompilationAttributekullanımına bağlı olarak isteğe bağlıdır. XAML derlenmemişse, XAML derleme zamanında ayrıştırılır ve XAML dosyası pcl'ye eklenir ve burada çalışma zamanında ayrıştırılır. XAML derlenmişse, derleme işlemi XAML'yi ikili bir forma dönüştürür ve çalışma zamanı işlemesi daha verimlidir.

XAML dosyasında platforma özgülük

XAML'de sınıf, OnPlatform platforma bağımlı işaretlemeyi seçmek için kullanılabilir. Bu genel bir sınıftır ve hedef türle eşleşen bir x:TypeArguments öznitelikle örneklenmelidir. Sınıfı OnIdiom benzerdir ancak çok daha az kullanılır.

Kitap yayımlandıktan sonra kullanımı OnPlatform değişmiştir. Başlangıçta , Androidve WinPhoneadlı iOSözelliklerle birlikte kullanılmıştır. Artık alt On nesnelerle birlikte kullanılır. özelliğini sınıfın Platform ortak const alanlarıyla tutarlı bir dize olarak Device ayarlayın. özelliğini etiketinin Value özniteliğiyle x:TypeArguments tutarlı bir değere OnPlatform ayarlayın.

OnPlatform, neredeyse aynı XAML'nin bloklarını içerdiğinden, ScaryColorList örneğinde gösterilmiştir. Bu yinelemeli işaretlemenin varlığı, bunu azaltmak için tekniklerin kullanılabilir olması gerektiğini göstermektedir.

İçerik özelliği öznitelikleri

Bazı özellik öğeleri, bir öğesinin <ContentPage.Content> kök öğesindeki ContentPageetiket veya alt StackLayoutöğelerini kapsayan <StackLayout.Children> etiket gibi oldukça sık gerçekleşir.

Her sınıfın sınıfında ile bir ContentPropertyAttribute özelliği tanımlamasına izin verilir. Bu özellik için özellik öğesi etiketleri gerekli değildir. ContentPage içerik özelliğini olarak Contenttanımlar ve Layout<T> (türetilen StackLayout sınıf) içerik özelliğini olarak Childrentanımlar. Bu özellik öğesi etiketleri gerekli değildir.

özelliği öğesidir Label Text.

Biçimlendirilmiş metin

TextVariations örneği, ve FormattedText özelliklerini Labelayarlamaya Text yönelik çeşitli örnekler içerir. XAML'de nesneler nesnenin Span FormattedString alt öğeleri olarak görünür.

Çok satırlı bir dize özelliğine Text ayarlandığında, satır sonu karakterleri boşluk karakterlerine dönüştürülür, ancak çok satırlı bir dize veya Label.Text etiketlerinin Label içeriği olarak göründüğünde satır sonu karakterleri korunur:

Metin varyasyonları paylaşımının üç ekran görüntüsü