Aracılığıyla paylaş


Varsayılan XAML Şema Bağlamı ve WPF XAML Şema Bağlamı

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ışı, XamlSchemaContext sınıfının API'sinde her zaman tam olarak görünmez. Ancak çoğu durumda, varsayılan XAML şema bağlamının etkilediği davranış, XamlMember veya XamlTypeüyeleri gibi XAML tür sisteminin ortak API'leri 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.

XamlSchemaContext oluşturucuyu çağırarak varsayılan davranışı kapsülleyen bir XamlSchemaContext oluşturabilirsiniz. Bu, varsayılan XAML şeması bağlamını açıkça oluşturur. Açıkça bir XamlSchemaContext giriş parametresi almayan 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 MethodInfoincelemeyi 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 düzeni 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üklenmesini sağlayabilir.

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, ContentPropertyAttribute özniteliği olmadan işlev gösteren XAML içerik özelliklerinin bulunduğu XAML için birkaç içerik modeli vardır. WPF için LookupContentProperty 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 sistem arama iyileştirmeleri: WPF, tam anlamıyla wpf tanımlı yüzlerce sınıfa devralan temel sınıf üye tanımları da dahil olmak üzere kapsamlı bir XAML sözlüğüne 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, XamlType ve XamlMembergenişletir 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 System.Windows.Markup.XamlReader veya System.Windows.Markup.XamlWritertemel alan XAML teknikleri kullanıyorsanız, WPF XAML şema bağlamı bu XAML okuyucusu 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, XamlReader.GetWpfSchemaContext'den çalışan bir WPF XAML şema bağlamı alabilirsiniz. Daha sonra bu değeri, XamlSchemaContextkullanan diğer API'ler için başlatma olarak kullanabilirsiniz. Örneğin, başlatma için XamlXmlReader çağırabilir 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, bir XamlType veya XamlMemberoluşturma başlatmayı veya XamlSchemaContext.GetXamlTypeçağırmayı 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, AppDomainCLR tanımlı kavramıyla tümleştirilir. XAML şema bağlamı, AppDomain 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 ilişkin yorumlanır. Mantık, XAML'nin bir XAML okuyucusu için gevşek XAML olmasına, XamlBuildTasktarafından bir DLL'de derlenen XAML'ye veya WPF'nin PresentationBuildTasktarafından oluşturulan BAML'ye bağlı olarak biraz farklıdır.

WPF için XAML şema bağlamı WPF uygulama modeliyle tümleşir ve bu modelde wpf uygulama ayrıntıları olan diğer faktörlerin yanı sıra AppDomain de kullanılır.

XAML okuyucu girişi (gevşek XAML)

  1. XAML şema bağlamı, uygulamanın 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 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.

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

  1. Nitelenmiş adla Assembly.Load(String) çağırın.

  2. Önceki adım başarısız olursa, Assembly.Load(String)çağırmak 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ının 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, Assembly.Load(String)çağırmak 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ının 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ş adla Assembly.Load(String) çağırın.

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

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

Ayrıca bkz.