Aracılığıyla paylaş


Bölüm 8'in özeti. Uyum içindeki kod ve XAML

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.

Bu bölümde XAML daha ayrıntılı bir şekilde ve özellikle kod ile XAML'nin nasıl etkileşime geçtiğini inceler.

Bağımsız değişkenleri geçirme

Genel durumda, XAML'de örneği oluşturulmuş bir sınıfın genel parametresiz oluşturucuya sahip olması gerekir; sonuç nesnesi özellik ayarları aracılığıyla başlatılır. Ancak, nesnelerin örneğini oluşturmanın ve başlatılabilmesinin iki yolu daha vardır.

Bunlar genel amaçlı teknikler olsa da, çoğunlukla MVVM Görünüm Modelleri ile bağlantılı olarak kullanılır.

Bağımsız değişkenler içeren oluşturucular

ParameteredConstructorDemo örneği, oluşturucu bağımsız değişkenlerini belirtmek için etiketinin x:Arguments nasıl kullanılacağını gösterir. Bu bağımsız değişkenler, bağımsız değişkenin türünü belirten öğe etiketleriyle sınırlandırılmalıdır. Temel .NET veri türleri için aşağıdaki etiketler kullanılabilir:

  • x:Object
  • x:Boolean
  • x:Byte
  • x:Int16
  • x:Int32
  • x:Int64
  • x:Single
  • x:Double
  • x:Decimal
  • x:Char
  • x:String
  • x:TimeSpan
  • x:Array
  • x:DateTime

XAML'den yöntemleri çağırabilir miyim?

FactoryMethodDemo örneği, nesnesini oluşturmak için çağrılan bir fabrika yöntemini belirtmek için öğesinin nasıl kullanılacağını x:FactoryMethod gösterir. Böyle bir fabrika yöntemi genel ve statik olmalı ve tanımlandığı türde bir nesne oluşturmalıdır. (Örneğin Color.FromRgb yöntemi genel ve statik olduğundan ve türünde Colorbir değer döndürdüğünden niteler.) Fabrika yöntemine yönelik bağımsız değişkenler etiketler içinde x:Arguments belirtilir.

x:Name özniteliği

özniteliği, x:Name XAML'de örneği oluşturulacak bir nesneye bir ad verilmesini sağlar. Bu adların kuralları C# değişken adları ile aynıdır. Oluşturucudaki çağrının InitializeComponent döndürülmesi sonrasında, arka planda kod dosyası ilgili XAML öğesine erişmek için bu adlara başvurabilir. Adlar aslında XAML ayrıştırıcısı tarafından oluşturulan kısmi sınıftaki özel alanlara dönüştürülür.

XamlClock örneği, arka planda kod dosyasının XAML'de tanımlanan iki Label öğeyi geçerli tarih ve saatle güncelleştirilmiş durumda tutmasına izin vermek için öğesinin kullanımını x:Name gösterir.

Aynı sayfadaki birden çok öğe için aynı ad kullanılamaz. Her platform için paralel adlandırılmış nesneler oluşturmak için kullanıyorsanız OnPlatform bu belirli bir sorundur. PlatformSpecificLabele örneği, böyle bir şey yapmak için daha iyi bir yol gösterir.

Özel XAML tabanlı görünümler

XAML'de işaretlemenin tekrarını önlemenin çeşitli yolları vardır. Yaygın tekniklerden biri, öğesinden ContentViewtüretilen yeni bir XAML tabanlı sınıf oluşturmaktır. Bu teknik ColorViewList örneğinde gösterilmiştir. sınıfı ColorView , belirli bir rengi ve adını görüntülemek için öğesinden ContentView türetilirken ColorViewListPage , sınıfı her zamanki gibi öğesinden ContentPage türetilir ve açıkça 17 örneği ColorViewoluşturur.

XAML'de sınıfa ColorView erişmek için, aynı derlemedeki sınıflar için yaygın olarak adlandırılan local başka bir XML ad alanı bildirimi gerekir.

Olaylar ve işleyiciler

Olaylar XAML'deki olay işleyicilerine atanabilir, ancak olay işleyicisinin kendisi arka planda kod dosyasında uygulanmalıdır. XamlKeypad, XAML'de bir tuş takımı kullanıcı arabirimi oluşturmayı ve arka planda kod dosyasında işleyicileri uygulamayı Clicked gösterir.

Dokunma hareketleri

Herhangi bir View nesne dokunma girişi alabilir ve bu girişten olaylar oluşturabilir. sınıfı, View öğesinden GestureRecognizertüretilen bir veya daha fazla sınıf örneği içerebilen bir GestureRecognizers koleksiyon özelliği tanımlar.

, TapGestureRecognizer olayları oluşturur Tapped . MonkeyTap programı, bir taklit oyunu oluşturmak için nesneleri dört BoxView öğeye nasıl ekleyişini TapGestureRecognizer gösterir:

Maymun dokunuşunun üçlü ekran görüntüsü

Ama MonkeyTap programının gerçekten sese ihtiyacı var. (Sonraki bölüme bakın.)