Varsayılan XAML Şema İçeriği ve WPF XAML Şema İçeriği

XAML şema bağlamı, belirli bir XAML sözcük dağarcığını kullanan bir XAML üretiminin, tür eşlemesinin nasıl çözümlendiği, derlemelerin nasıl yüklendiği, belirli okuyucu ve yazıcı ayarlarının nasıl yorumlandığı gibi nesne yazma davranışıyla nasıl etkileşime geçtiğini niteleyen kavramsal bir varlıktır. Bu konu, CLR tür sistemini temel alan .NET XAML Hizmetleri'nin özelliklerini ve ilişkili varsayılan XAML şema bağlamını açıklar. Bu konu başlığında WPF için kullanılan XAML şema bağlamı da açıklanmaktadır.

Varsayılan XAML Şema Bağlamı

.NET XAML Hizmetleri, varsayılan bir XAML şema bağlamı uygular ve kullanır. Varsayılan XAML şeması bağlam davranışı, sınıfın API'sinde XamlSchemaContext her zaman tam olarak görünmez. Ancak, çoğu durumda varsayılan XAML şema bağlamının etkilediği davranış, veya XamlTypeüyeleri gibi XAML tür sisteminin ortak API'leri XamlMember aracılığıyla veya varsayılan XAML şema bağlamını kullanan XAML okuyucuları ve XAML yazıcılarında kullanıma sunulan API'ler aracılığıyla gözlemlenebilir.

Oluşturucuyu çağırarak XamlSchemaContext varsayılan davranışı kapsülleyen bir XamlSchemaContext oluşturabilirsiniz. Bu, varsayılan XAML şeması bağlamını açıkça oluşturur. Giriş parametresini açıkça almayan XamlSchemaContext API'leri kullanarak bir XAML okuyucusu veya XAML yazıcısı başlatırsanız, aynı varsayılan XAML şema bağlamı örtük olarak oluşturulur.

Varsayılan XAML şema bağlamı, türü eşleme davranışı için CLR yansımasını kullanır. Bu, CLR Typetanımlamayı ve ilgili PropertyInfo veya MethodInfo'yi incelemeyi içerir. Ayrıca, CLR destek türünü kullanan XAML türü veya XAML üyesi bilgilerinin ayrıntılarını doldurmak için türlerde veya üyelerde CLR atfı kullanılır. Varsayılan XAML şema bağlamı, clr türü sisteminden gerekli bilgiler sağlandığından Invoker , desen gibi tür sistemi uzantısı tekniklerini gerektirmez.

Derleme yükleme mantığı için, varsayılan XAML şema bağlamı temel olarak XAML ad alanı eşlemelerinde sağlanan tüm derleme değerlerine dayanır. Ayrıca, LocalAssembly iç türleri yükleme gibi senaryolar için bir derlemenin yüklenmesi için ipucu verebilir.

WPF XAML Şema Bağlamı

WPF uygulaması, varsayılan olmayan bir XAML şema bağlamı uygulanarak getirilebilen özellik türlerinin ilginç bir çizimini sağladığından WPF XAML şema bağlamı bu konu başlığında açıklanmıştır. Ayrıca, XAML şeması bağlam kavramı WPF XAML'yi ele alan WPF belgelerinde çok fazla ele alınmaz; XAML şema bağlamının etkinleştirmiş olduğu davranış, yalnızca varsayılan XAML şeması bağlamının nasıl çalıştığına ilişkin bir tartışmayla tümleştirildiğinde tam olarak anlaşılabilir. WPF XAML şema bağlamı aşağıdaki davranışı uygular.

Arama geçersiz kılmaları: WPF'de, özniteliklendirilmeden ContentPropertyAttribute işlev gösteren XAML içerik özelliklerinin bulunduğu XAML için birkaç con çadır modu ls vardır. LookupContentProperty WPF için geçersiz kılmalar bu davranışı uygular.

WPF ifadeleri için erteleme: WPF, çalışma zamanı bağlamı kullanılabilir olana kadar bir değeri erteleen çeşitli ifade sınıfları içerir. Ayrıca şablon genişletme, erteleme tekniklerini kullanan bir çalışma zamanı davranışıdır.

Tür sistemi arama iyileştirmeleri: WPF,yüzlerce WPF tanımlı sınıfa devralan temel sınıf üyesi tanımları da dahil olmak üzere kapsamlı bir XAML kelime dağarcığına ve nesne modeline sahiptir. Ayrıca WPF'nin kendisi çeşitli derlemelere yayılır. WPF, arama tablolarını ve diğer teknikleri kullanarak tür aramasını iyileştirir. Bu, varsayılan XAML şema bağlamı ve CLR tabanlı tür araması üzerinde performans geliştirmeleri sağlar. Türlerin arama tablosunda mevcut olmadığı durumlarda davranış, varsayılan XAML şema bağlamı ile benzer XAML şema bağlamı tekniklerini kullanır.

XamlType ve XamlMember uzantısı: WPF, bağımlılık özellikleriyle özellik kavramlarını ve yönlendirilen olaylarla olay kavramlarını genişletir. Bu kavramlara XAML işleme işlemleri için daha fazla görünürlük sağlamak için WPF, ve XamlMember'yi genişletir XamlType ve bağımlılık özelliğini ve yönlendirilen olay özelliklerini bildiren iç özellikler ekler.

WPF XAML Şema Bağlamı'na Erişme

WPF veya System.Windows.Markup.XamlWritertabanlı XAML teknikleri kullanıyorsanız, WPF System.Windows.Markup.XamlReader XAML şema bağlamı bu XAML okuyucu ve XAML yazıcı uygulamalarında zaten kullanımdadır.

WPF XAML şema bağlamı ile başlatılmayan diğer XAML okuyucu veya XAML yazıcı uygulamaları kullanıyorsanız, içinden XamlReader.GetWpfSchemaContextçalışan bir WPF XAML şema bağlamı alabilirsiniz. Daha sonra bu değeri, kullanan diğer API'ler için başlatma olarak kullanabilirsiniz XamlSchemaContext. Örneğin, başlatma için çağırabilir XamlXmlReader ve WPF XAML şema bağlamını geçirebilirsiniz. Veya XAML türü sistem işlemleri için WPF XAML şema bağlamını kullanabilirsiniz. Bu, veya XamlType veya XamlMemberçağrısının XamlSchemaContext.GetXamlTypeoluşturulmasını içerebilir.

WPF XAML'nin belirli yönlerine saf XAML düğümü akışı perspektiflerinden erişirseniz, WPF çerçevesi özelliklerinden bazılarının henüz işlemmiş olabileceğini unutmayın. Örneğin, denetimler için WPF şablonları henüz uygulanmamıştır. Bu nedenle, çalışma zamanında tam bir görsel ağaçla doldurulabilecek bir özelliğe erişirseniz, yalnızca şablona başvuran bir özellik değeri görebilirsiniz. WPF işaretleme uzantıları için sağlanan hizmet bağlamı, çalışma zamanı olmayan bir durumdan sağlanırsa da doğru olmayabilir ve nesne grafı yazmaya çalışırken özel durumlarla sonuçlanabilir.

XAML ve Derleme Yükleme

XAML ve .NET XAML Hizmetleri için derleme yükleme, CLR tanımlı kavramı AppDomainile tümleştirilir. XAML şema bağlamı, ve diğer faktörlerin kullanımına bağlı olarak derlemelerin nasıl yüklenip çalışma zamanında veya tasarım zamanında türlerin bulunup bulunmayışına AppDomain ilişkin yorumlanır. Mantık, XAML'nin bir XAML okuyucusu için gevşek XAML olmasına, tarafından bir DLL'de XamlBuildTaskderlenen XAML'ye veya WPF'nin tarafından oluşturulan BAML'ye PresentationBuildTaskbağlı olarak biraz farklıdır.

WPF için XAML şema bağlamı, WPF uygulama modeliyle tümleşir ve wpf uygulama ayrıntıları olan diğer faktörleri de kullanır AppDomain .

XAML okuyucu girişi (gevşek XAML)

  1. XAML şema bağlamı, uygulamanın üzerinden AppDomain yinelenir ve en son yüklenen derlemeden başlayarak adın tüm yönleriyle eşleşen zaten yüklenmiş bir derleme arar. Eşleşme bulunursa, bu derleme çözümleme için kullanılır.

  2. Aksi takdirde, bir derlemeyi yüklemek için CLR Assembly API'sini temel alan aşağıdaki tekniklerden biri kullanılır:

XamlBuildTask

XamlBuildTask , Windows Communication Foundation (WCF) ve Windows Workflow Foundation için kullanılır.

aracılığıyla XamlBuildTask derleme başvurularının her zaman tam olarak nitelendiğini unutmayın.

  1. Nitelenmiş adı arayın Assembly.Load(String) .

  2. Önceki adım başarısız olursa, çağrısı Assembly.Load(String)yapmak için kısa adı (ve varsa ortak anahtar belirtecini) kullanın.

BAML (PresentationBuildTask)

BAML için derleme yüklemenin iki yönü vardır: BAML'yi bileşen olarak içeren ilk derlemeyi yükleme ve BAML üretimi tarafından başvuruda bulunılan türler için tür yedekleme derlemelerini yükleme.

İlk işaretleme için derleme yükü:

İşaretlemenin yüklenecek derleme başvurusu her zaman nitelenmez.

  1. WPF XAML şema bağlamı WPF uygulaması aracılığıyla AppDomain yinelenir ve en son yüklenen derlemeden başlayarak adın tüm yönleriyle eşleşen önceden yüklenmiş bir derleme arar. Eşleşme bulunursa, bu derleme çözümleme için kullanılır.

  2. Önceki adım başarısız olursa, çağrısı Assembly.Load(String)yapmak için kısa adı (ve varsa ortak anahtar belirtecini) kullanın.

BAML türlerine göre derleme başvuruları:

BAML üretiminde kullanılan türler için derleme başvuruları, derleme görevinin çıktısı olarak her zaman tam olarak nitelenir.

  1. WPF XAML şema bağlamı WPF uygulaması aracılığıyla AppDomain yinelenir ve en son yüklenen derlemeden başlayarak adın tüm yönleriyle eşleşen önceden yüklenmiş bir derleme arar. Eşleşme bulunursa, bu derleme çözümleme için kullanılır.

  2. Aksi takdirde, bir derlemeyi yüklemek için aşağıdaki tekniklerden biri kullanılır:

    • Nitelenmiş adı arayın Assembly.Load(String) .

    • Kısa bir ad + ortak anahtar belirteci bileşimi BAML'nin yüklendiği derlemeyle eşleşiyorsa, bu derlemeyi kullanın.

    • çağrısı Assembly.Load(String)yapmak için kısa ad + ortak anahtar belirteci kullanın.

Ayrıca bkz.