Bölüm 10'un özeti. XAML biçimlendirme uzantıları

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.

Normalde, XAML ayrıştırıcısı, temel .NET veri türleri için standart dönüştürmeleri veya özelliğine veya türüne TypeConverterAttributebağlı bir türevi temel alarak öznitelik değeri olarak herhangi bir TypeConverter dize kümesini özellik türüne dönüştürür.

Ancak bazen farklı bir kaynaktan, örneğin sözlükteki bir öğeden veya statik bir özellik ya da alanın değerinden ya da bir tür hesaplamadan öznitelik ayarlamak kullanışlı olabilir.

Bu, XAML işaretleme uzantısının işidir. Ada rağmen, XAML işaretleme uzantıları XML uzantısı değildir . XAML her zaman yasal XML'dir.

Kod altyapısı

XAML işaretleme uzantısı, arabirimini uygulayan IMarkupExtension bir sınıftır. Böyle bir sınıf genellikle adının sonunda sözcüğüne Extension sahiptir, ancak genellikle bu sonek olmadan XAML'de görünür.

Aşağıdaki XAML işaretleme uzantıları, XAML'nin tüm uygulamaları tarafından desteklenir:

Bu dört XAML işaretleme uzantısı, dahil olmak üzere Xamarin.Formsbirçok XAML uygulaması tarafından desteklenir:

ile RelativeLayoutbağlantılı olarak ek bir XAML işaretleme uzantısı eklenmiştirXamarin.Forms:

Statik üyelere erişme

x:Static Bir ortak statik özellik, alan veya numaralandırma üyesinin değerine bir öznitelik ayarlamak için öğesini kullanın. Member özelliğini statik üye olarak ayarlayın. Küme ayraçlarında ve üye adını belirtmek x:Static genellikle daha kolaydır. Özelliğin Member adının dahil edilmesi gerekmez, yalnızca üyenin kendisi. Bu yaygın söz dizimi SharedStatics örneğinde gösterilmiştir . Statik alanların kendileri sınıfında AppConstants tanımlanır. Bu teknik, bir program aracılığıyla kullanılan sabitleri oluşturmanıza olanak tanır.

Ek bir XML ad alanı bildirimiyle, SystemStatics örneğinde gösterildiği gibi .NET çerçevesinde tanımlanan genel statik özelliklere, alanlara veya numaralandırma üyelerine başvurabilirsiniz.

Kaynak sözlükleri

sınıfı, VisualElement türünde ResourceDictionarybir nesnesine ayarlayabileceğiniz adlı Resources bir özellik tanımlar. XAML içinde öğeleri bu sözlükte depolayabilir ve özniteliğiyle x:Key tanımlayabilirsiniz. Kaynak sözlüğünde depolanan öğeler, öğeye yapılan tüm başvurular arasında paylaşılır.

Çoğu amaç için StaticResource

Çoğu durumda, ResourceSharing örneğinde StaticResource gösterildiği gibi kaynak sözlüğündeki bir öğeye başvurmak için işaretleme uzantısını kullanırsınız. Bir StaticResourceExtension öğeyi veya StaticResource küme ayraçları içinde kullanabilirsiniz:

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

İşaretlemeyi genişletme ve x:Static işaretleme uzantısını StaticResource karıştırmayın.

Sözlük ağacı

XAML ayrıştırıcısı bir StaticResourceile karşılaştığında, eşleşen bir anahtar için görsel ağacı aramaya başlar ve uygulamanın sınıfında öğesine ResourceDictionary App bakar. Bu, görsel ağaçtaki daha derin bir kaynak sözlüğündeki öğelerin görsel ağaçta daha yüksek bir kaynak sözlüğü geçersiz kılmasına olanak tanır. Bu, ResourceTrees örneğinde gösterilmiştir .

Özel amaçlar için DynamicResource

İşaretlemeyi StaticResource uzantısı, çağrı sırasında bir görsel ağaç oluşturulduğunda bir öğenin sözlükten alınmasına InitializeComponent neden olur. alternatifi StaticResource , sözlük anahtarına bir bağlantı tutan ve anahtar tarafından başvurulan öğe değiştiğinde hedefi güncelleştiren seçeneğidir DynamicResource.

ile arasındaki StaticResource fark DynamicVsStatic örneğinde gösterilmiştir.DynamicResource

tarafından DynamicResource ayarlanan bir özellik, 11. Bölüm, Bağlanabilir altyapı bölümünde açıklandığı gibi bağlanabilir bir özellik tarafından yedeklenmelidir.

Daha az kullanılan işaretleme uzantıları

x:Null bir özelliği olarak ayarlamak için işaretleme uzantısını nullkullanın.

x:Type.NET Type nesnesine özellik ayarlamak için işaretleme uzantısını kullanın.

Dizi tanımlamak için kullanın x:Array . [Type] özelliğini işaretleme x:Type uzantısı olarak ayarlayarak dizi üyelerinin türünü belirtin.

Özel işaretleme uzantısı

Arabirimini bir yöntemle ProvideValue uygulayan IMarkupExtension bir sınıf yazarak kendi XAML işaretleme uzantılarınızı oluşturabilirsiniz.

sınıfı bu HslColorExtension gereksinimi karşılar. , , LSve Aadlı Hözelliklerin değerlerine göre türünde Color bir değer oluşturur. Bu sınıf, kitap boyunca oluşturulan ve kullanılan Book.Toolkit adlıXamarin.Forms kitaplıktaki Xamarin.Forms ilk öğedir.

CustomExtensionDemo örneği, bu kitaplığa başvurmayı ve özel işaretleme uzantısını kullanmayı gösterir.