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 TypeConverterAttribute
bağ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:
x:Static
tarafından desteklenirStaticExtension
x:Reference
tarafından desteklenirReferenceExtension
x:Type
tarafından desteklenirTypeExtension
x:Null
tarafından desteklenirNullExtension
x:Array
tarafından desteklenirArrayExtension
Bu dört XAML işaretleme uzantısı, dahil olmak üzere Xamarin.Formsbirçok XAML uygulaması tarafından desteklenir:
StaticResource
tarafından desteklenirStaticResourceExtension
DynamicResource
tarafından desteklenirDynamicResourceExtension
Binding
tarafındanBindingExtension
desteklenir— Bölüm 16'da ele alınmıştı. Veri bağlamaTemplateBinding
tarafındanTemplateBindingExtension
desteklenir — kitapta ele alınmaz
ile RelativeLayout
bağlantılı olarak ek bir XAML işaretleme uzantısı eklenmiştirXamarin.Forms:
ConstraintExpression
—kitapta ele alınmaz
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 ResourceDictionary
bir 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:
İş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 StaticResource
ile 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ı null
kullanı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. , , L
S
ve A
adlı 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.