Özel türler ve kitaplıklar için XAML ile ilgili CLR öznitelikleri
Makale
Bu konu, .NET XAML Hizmetleri tarafından tanımlanan ortak dil çalışma zamanı (CLR) özniteliklerini açıklar. Ayrıca, .NET'te tanımlanan ve uygulamadan derlemelere veya türlere yönelik XAML ile ilgili senaryoya sahip olan diğer CLR özniteliklerini de açıklar. Derlemeleri, türleri veya üyeleri bu CLR öznitelikleriyle dağıtmak, türlerinizle ilgili XAML türü sistem bilgileri sağlar. XAML düğüm akışını doğrudan veya ayrılmış XAML okuyucuları ve XAML yazıcıları aracılığıyla işlemek için .NET XAML Hizmetleri kullanan herhangi bir XAML tüketicisine bilgi sağlanır.
Özel Türler ve Özel Üyeler için XAML ile İlgili CLR Öznitelikleri
CLR özniteliklerini kullanmak, türlerinizi tanımlamak için genel CLR'yi kullandığınızı gerektirir, aksi takdirde bu öznitelikler kullanılamaz. Tür yedeklemesini tanımlamak için CLR kullanırsanız, .NET XAML Hizmetleri XAML yazıcıları tarafından kullanılan varsayılan XAML şeması bağlamı, derlemeleri yedeklemeye karşı yansıma aracılığıyla CLR ilişkilendirmesini okuyabilir.
Aşağıdaki bölümlerde, özel türlere veya özel üyelere uygulayabileceğiniz XAML ile ilgili öznitelikler açıklanmaktadır. Her CLR özniteliği, bir XAML türü sistemiyle ilgili bilgileri iletir. Yük yolunda, öznitelikli bilgiler XAML okuyucusunun geçerli bir XAML düğümü akışı oluşturmasını veya XAML yazıcısının geçerli bir nesne grafı oluşturmasını sağlar. Kaydetme yolunda, öznitelikli bilgiler XAML okuyucusunun XAML türü sistem bilgilerini yeniden oluşturan geçerli bir XAML düğüm akışı oluşturmalarına yardımcı olur; veya XAML yazıcısı veya diğer XAML tüketicileri için serileştirme ipuçlarını veya gereksinimlerini bildirir.
Şunlar için geçerlidir: Eklenebilir özellikleri destekleyen sınıf, özellik veya get erişimci üyeleri.
Bağımsız Değişkenler: Yok
AmbientAttribute özelliğin veya öznitelikli türü alan tüm özelliklerin XAML'deki ortam özelliği kavramı altında yorumlanması gerektiğini belirtir. Ortam kavramı, XAML işlemcilerinin üyelerin tür sahiplerini nasıl belirlediğini gösterir. Ortam özelliği, nesne grafı oluştururken değerin ayrıştırıcı bağlamında kullanılabilir olması beklenen ancak oluşturulan hemen XAML düğüm kümesi için tipik tür üyesi aramasının askıya alındığı bir özelliktir.
Ortam kavramı, CLR atfının tanımladığı AttributeTargetsşekilde özellikler olarak temsil edilmeyen eklenebilir üyelere uygulanabilir. Yöntem ilişkilendirme kullanımı yalnızca XAML için eklenebilir kullanımı destekleyen bir get erişimci için uygulanmalıdır.
Bağımsız değişkenler: Tek bir oluşturucu bağımsız değişkeniyle eşleşen özelliğin adını belirten dize.
ConstructorArgumentAttribute bir nesnenin parametresiz oluşturucu söz dizimi kullanılarak başlatılabildiğini ve belirtilen adın bir özelliğinin yapı bilgilerini sağladığını belirtir. Bu bilgiler öncelikli olarak XAML serileştirme içindir. Daha fazla bilgi için bkz. ConstructorArgumentAttribute.
Bağımsız değişkenler: Öznitelik türündeki bir üyenin adını belirten dize.
ContentPropertyAttribute bağımsız değişkeni tarafından adlandırılmış olarak özelliğinin bu tür için XAML içerik özelliği olarak görev yapması gerektiğini belirtir. XAML içerik özelliği tanımı, tanımlama türüne atanabilen tüm türetilmiş türleri devralır. Belirli türetilmiş türe uygulayarak ContentPropertyAttribute tanımı belirli bir türetilmiş türde geçersiz kılabilirsiniz.
XAML içerik özelliği olarak hizmet veren özellik için, özellik için özellik öğesi etiketlemesi XAML kullanımında atlanabilir. Genellikle, içeriğiniz ve kapsama modelleriniz için kolaylaştırılmış bir XAML işaretlemesini yükselten XAML içerik özelliklerini belirlersiniz. XAML içerik özelliği olarak yalnızca bir üye belirlenebildiğinden, bazen bir türün çeşitli kapsayıcı özelliklerinden hangisinin XAML içerik özelliği olarak atanması gerektiğine ilişkin tasarım seçimleri yapabilirsiniz. Diğer kapsayıcı özellikleri açık özellik öğeleriyle kullanılmalıdır.
XAML düğüm akışında, XAML içerik özellikleri için özelliğinin adını kullanarak ve düğümleri üretmeye StartMemberEndMember devam eder XamlMember. Bir üyenin XAML içerik özelliği olup olmadığını belirlemek için konumundan XamlType değerini StartObject inceleyin ve değerini ContentPropertyalın.
Şunlar için geçerlidir: Sınıf, özellikle koleksiyon türleri.
Bağımsız değişkenler:Type Yabancı içerik için içerik sarmalayıcı türü olarak kullanılacak türü belirten A.
ContentWrapperAttribute , ilişkili koleksiyon türünde yabancı içeriği sarmalamada kullanılacak bir veya daha fazla türü belirtir. Yabancı içerik, içerik özelliğinin türündeki tür sistemi kısıtlamalarının, sahip olan tür için XAML kullanımının destekleyeceği olası içerik olaylarının tümünü yakalamadığı durumları ifade eder. Örneğin, belirli bir türdeki içerik için XAML desteği, kesin olarak belirlenmiş bir genel Collection<T>içindeki dizeleri destekleyebileceğinden. İçerik sarmalayıcıları, metinle ilgili con çadır modu ls'yi geçirme gibi koleksiyonlar için önceden var olan işaretleme kurallarını XAML'nin atanabilir değerler kavramına geçirmek için kullanışlıdır.
Birden fazla içerik sarmalayıcı türü belirtmek için özniteliğini birden çok kez uygulayın.
Bağımsız değişkenler: Öznitelik türündeki başka bir üyenin adını belirten dize.
DependsOnAttribute öznitelikli özelliğin başka bir özelliğin değerine bağlı olduğunu gösterir. Bu özniteliğin bir özellik tanımına uygulanması, bağımlı özelliklerin ilk olarak XAML nesne yazma işleminde işlenmesini sağlar. kullanımları DependsOnAttribute , geçerli nesne oluşturma için belirli bir ayrıştırma sırasının izlenmesi gereken türlerdeki olağanüstü özellik durumlarını belirtir.
Bir özellik tanımına birden çok DependsOnAttribute servis talebi uygulayabilirsiniz.
Bağımsız değişkenler: İki tür ilişkilendirmeyi destekler:
Öznitelikli türdeki bir özelliğin adını belirten dize.
Bir özelliğin adını belirten bir dize ve adlandırılmış özelliği tanımlayan tür için bir Type . Bu form, XAML ad kapsamı özelliği olarak eklenebilir bir üye belirtmek içindir.
NameScopePropertyAttribute öznitelikli sınıf için XAML ad kapsamı değerini sağlayan bir özellik belirtir. XAML ad kapsamı özelliğinin gerçek XAML ad kapsamını, deposunu ve davranışını uygulayan INameScope ve tutan bir nesneye başvurması beklenir.
Tanım, tanımlama türüne atanabilen tüm türetilmiş türleri devralır. Belirli türetilmiş türe uygulayarak RuntimeNamePropertyAttribute tanımı belirli bir türetilmiş türde geçersiz kılabilirsiniz.
TypeConverterAttribute Tür dönüştürücü uygulamanıza başvurarak özniteliğini türünüz için uygulayın. Sınıflarda, yapılarda veya arabirimlerde XAML için tür dönüştürücüleri tanımlayabilirsiniz. Numaralandırmalar için tür dönüştürmesi sağlamanız gerekmez; bu dönüştürme yerel olarak etkinleştirilir.
Tür dönüştürücünüz, işaretlemedeki öznitelikler veya başlatma metni için kullanılan bir dizeden hedef türünüze dönüştürebilmelidir. Daha fazla bilgi için bkz . TypeConverters ve XAML.
Bir türün tüm değerlerine uygulamak yerine, belirli bir özellik üzerinde XAML için tür dönüştürücü davranışı da oluşturulabilir. Bu durumda, özellik tanımına (özel TypeConverterAttribute ve get tanımları değil dış tanım) uygularsınızset.
Özel eklenebilir üyenin XAML kullanımına yönelik bir tür dönüştürücü davranışı, XAML kullanımını destekleyen yöntem erişimcisine TypeConverterAttribute uygulanarak get atanabilir.
benzer şekilde TypeConverter, TypeConverterAttribute XAML'nin varlığından önce .NET'te mevcut ve tür dönüştürücü modeli başka amaçlara hizmet etti. öğesine başvurmak ve kullanmak TypeConverterAttributeiçin bunu tam olarak nitelemeniz veya için usingbir System.ComponentModel deyim sağlamanız gerekir. Ayrıca projenize Sistem derlemesini de ekleyin.
Bağımsız Değişkenler: Boole değeri. Özniteliğin amaçlanan amacı için kullanılırsa, değeri olarak trueayarlanmalıdır.
Türün XAML nesne grafı oluşturma sırasında yukarıdan aşağıya derlenip derlenmiş olmadığını gösterir. Bu, programlama modelinizin tanımıyla büyük olasılıkla yakından ilgili olan gelişmiş bir kavramdır. Daha fazla bilgi için bkz. UsableDuringInitializationAttribute.
Şunlar için geçerlidir: Sınıf, özellik, yöntem (XAML geçerli tek yöntem durumu, eklenebilir bir üyeyi destekleyen bir get erişimcidir).
Bağımsız değişkenler:Type Öznitelikli türün veya belirli öznitelikli özelliğin tüm özellikleri seri hale getirildiğinde kullanılacak değer serileştiricisi destek sınıfını belirten A.
ValueSerializer bir değerinden daha fazla durum ve bağlam gerektiren bir TypeConverter değer serileştirme sınıfı belirtir.
ValueSerializereklenebilir üye için statik ValueSerializerAttribute erişimci yöntemine get özniteliği uygulanarak eklenebilir bir üyeyle ilişkilendirilebilir. Değer serileştirmesi numaralandırmalar, arabirimler ve yapılar için de geçerlidir, ancak temsilciler için geçerli değildir.
Şunlar için geçerlidir: Sınıf, özellikle de karma içeriği barındırması beklenen koleksiyon türleri; burada nesne öğelerinin etrafındaki boşluklar kullanıcı arabirimi gösterimi için önemli olabilir.
Bağımsız Değişkenler: Yok.
WhitespaceSignificantCollectionAttribute bir koleksiyon türünün, XAML düğümü akışının koleksiyon içindeki değer düğümlerinin oluşturulmasını etkileyen bir XAML işlemcisi tarafından önemli ölçüde boşluk olarak işlenmesi gerektiğini belirtir. Daha fazla bilgi için bkz . XAML'de boşluk işleme.
Bağımsız değişkenler: dize olarak iki ilişkilendirme form türünü veya olarak Typetürünü destekler. Bkz. XamlDeferLoadAttribute.
Bir sınıfın veya özelliğin XAML için ertelenmiş bir yük kullanımına (şablon davranışı gibi) sahip olduğunu gösterir ve erteleme davranışını ve hedef/içerik türünü etkinleştiren sınıfı bildirir.
Bir sınıfın bir veya daha fazla özelliği için değer sağlamak üzere işaretleme uzantısı kullanabileceğini gösterir ve sınıfın herhangi bir özelliğinde işaretleme uzantısı kümesi işlemi gerçekleştirmeden önce XAML yazıcısının çağırması gereken bir işleyiciye başvurur.
Bir sınıfın bir veya daha fazla özelliği için değer sağlamak üzere tür dönüştürücüsü kullanabileceğini gösterir ve sınıfın herhangi bir özelliğinde tür dönüştürücü kümesi işlemi gerçekleştirmeden önce XAML yazıcısının çağırması gereken bir işleyiciye başvurur.
Bağımsız değişkenler: Öznitelikli türde diğer ad xml:lang olarak atanacak özelliğin adını belirten dize.
XmlLangPropertyAttribute , XML lang yönergesine eşlenen öznitelikli türün bir özelliğini bildirir. Özelliğin türü String olmayabilir ancak bir dizeden atanabilir olması gerekir (atama, bir tür dönüştürücüsü özelliğin türüyle veya belirli bir özellikle ilişkilendirilerek gerçekleştirilebilir). Özelliğin okunması/yazılması gerekir.
Eşleme xml:lang senaryosu, çalışma zamanı nesne modelinin xmldom ile özel olarak işlenmeden XML tarafından belirtilen dil bilgilerine erişmesini sağlar.
Tanım, tanımlama türüne atanabilen tüm türetilmiş türleri devralır. Bu yaygın olmayan bir senaryo olsa da, belirli türetilmiş türe uygulayarak XmlLangPropertyAttribute tanımı belirli bir türetilmiş tür üzerinde geçersiz kılabilirsiniz.
Derleme Düzeyinde XAML ile İlgili CLR Öznitelikleri
Aşağıdaki bölümlerde, türlere veya üye tanımlarına uygulanmayan ancak bunun yerine derlemelere uygulanan XAML ile ilgili öznitelikler açıklanmaktadır. Bu öznitelikler, XAML'de kullanılacak özel türler içeren bir kitaplık tanımlamanın genel hedefine bağlıdır. Özniteliklerden bazıları XAML düğüm akışını doğrudan etkilemek zorunda değildir, ancak diğer tüketicilerin kullanması için düğüm akışında geçirilir. Bilgilerin tüketicileri, XAML ad alanı bilgilerine ve ilişkili ön ek bilgilerine ihtiyaç duyan tasarım ortamlarını veya serileştirme işlemlerini içerir. XAML şema bağlamı (.NET XAML Hizmetleri varsayılanı dahil) de bu bilgileri kullanır.
Alt dizinine eklenecek XAML ad alanının tanımlayıcısını belirten bir dize.
XAML ad alanını önceki bağımsız değişkenden çıkarabilen XAML ad alanının tanımlayıcısını belirten bir dize.
XmlnsCompatibleWithAttribute bir XAML ad alanının başka bir XAML ad alanı tarafından alt dizinine alınabileceğini belirtir. Genellikle, alt XAML ad alanı daha önce tanımlanmış XmlnsDefinitionAttributebir içinde belirtilir. Bu teknik, bir kitaplıktaki XAML kelime dağarcığını sürümlendirmek ve önceki sürüme göre daha önce tanımlanmış işaretlemeyle uyumlu hale getirmek için kullanılabilir.
Tanımlanacağı XAML ad alanının tanımlayıcısını belirten bir dize.
CLR ad alanını adlandıran bir dize. CLR ad alanı derlemenizdeki ortak türleri tanımlamalı ve CLR ad alanı türlerinden en az biri XAML kullanımına yönelik olmalıdır.
XmlnsDefinitionAttribute bir XAML ad alanı ile CLR ad alanı arasında derleme başına bir eşleme belirtir. Bu eşleme daha sonra XAML nesne yazıcısı veya XAML şema bağlamı tarafından tür çözümlemesi için kullanılır.
Bir derlemeye birden XmlnsDefinitionAttribute fazla uygulanabilir. Bu işlem aşağıdaki nedenlerle yapılabilir:
Kitaplık tasarımı, çalışma zamanı API erişiminin mantıksal organizasyonu için birden çok CLR ad alanı içerir; ancak, aynı XAML ad alanına başvurarak bu ad alanları içindeki tüm türlerin XAML tarafından kullanılabilir olmasını istersiniz. Bu durumda, aynı XmlnsDefinitionAttribute değeri ama farklı XmlNamespace değerleri kullanarak birkaç ClrNamespace öznitelik uygularsınız. Bu, özellikle çerçevenizin veya uygulamanızın ortak kullanımda varsayılan XAML ad alanı olmasını amaçlayan XAML ad alanı için eşlemeler tanımlıyorsanız kullanışlıdır.
Kitaplık tasarımı birden çok CLR ad alanı içerir ve bu CLR ad alanları içindeki türlerin kullanımları arasında kasıtlı bir XAML ad alanı ayrımı istiyorsunuz.
Derlemede bir CLR ad alanı tanımlarsınız ve bunun birden fazla XAML ad alanı üzerinden erişilebilir olmasını istersiniz. Bu senaryo, aynı kod tabanına sahip birden çok sözcük dağarcığını desteklediğiniz zaman oluşur.
XAML dil desteğini bir veya daha fazla CLR ad alanında tanımlarsınız. Bu durumda, XmlNamespace değeri olmalıdır http://schemas.microsoft.com/winfx/2006/xaml.
XAML ad alanının tanımlayıcısını belirten bir dize.
Önerilen ön eki belirten bir dize.
XmlnsDefinitionAttribute XAML ad alanı için kullanılması önerilen bir ön ek belirtir. Ön ek, .NET XAML Hizmetleri XamlXmlWritertarafından seri hale getirilmiş bir XAML dosyasında öğe ve öznitelik yazarken veya XAML uygulayan bir kitaplık XAML düzenleme özelliklerine sahip bir tasarım ortamıyla etkileşime geçtiğinde kullanışlıdır.
Bir derlemeye birden XmlnsPrefixAttribute fazla uygulanabilir. Bu işlem aşağıdaki nedenlerle yapılabilir:
Derlemeniz birden fazla XAML ad alanı için türleri tanımlar. Bu durumda, her XAML ad alanı için farklı ön ek değerleri tanımlayın.
Birden çok sözcük dağarcığını destekliyorsunuz ve her sözlük ve XAML ad alanı için farklı ön ekleri kullanıyorsunuz.
Derlemede XAML dil desteği tanımlarsınız ve için XmlnsDefinitionAttributebir http://schemas.microsoft.com/winfx/2006/xaml değeriniz vardır. Bu durumda, genellikle ön ekini xyükseltmeniz gerekir.
Not
.NET XAML Hizmetleri, XAML ile ilgili özniteliğini RootNamespaceAttributede tanımlar. Bu öznitelik, proje sistemi desteği için derleme düzeyinde bir özniteliktir ve XAML özel türleri için uygun değildir.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET Desktop feedback geri bildirimi
.NET Desktop feedback, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.