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

XAML şeması bağlamı, tür eşlemesinin nasıl çözümlendiğini, derlemelerin nasıl yüklendiğini, belirli okuyucu ve yazıcı ayarlarının nasıl yorumlandığını dahil olmak üzere, belirli bir XAML sözlüğünü kullanan XAML üretiminin nesne yazma davranışıyla nasıl etkileşime gireceğini niteleyen kavramsal bir varlıktır. Bu konuda, .NET XAML Hizmetleri ve CLR türü sistemine dayalı ilişkili varsayılan XAML şeması bağlamı açıklanmaktadır. Bu konu, WPF için kullanılan XAML şeması bağlamını da açıklar.

Varsayılan XAML şema bağlamı

.NET XAML Hizmetleri, varsayılan XAML şema bağlamını uygular ve kullanır. Varsayılan XAML şeması bağlam davranışı, sınıfın API 'sinde her zaman tamamen görünmez değildir XamlSchemaContext . Ancak çoğu durumda, varsayılan XAML şeması bağlamının etkilediği davranış, veya üyeleri gibi XAML tür sisteminin ortak API 'SI aracılığıyla ya da xaml XamlMemberXamlType Okuyucular ve varsayılan xaml şema BAĞLAMıNı kullanan xaml yazıcılarında sunulan API 'ler aracılığıyla observable 'dır.

XamlSchemaContextOluşturucuyu çağırarak varsayılan davranışı kapsülleyen bir oluşturabilirsiniz XamlSchemaContext . Bu, varsayılan XAML şema bağlamını açıkça oluşturur. Aynı varsayılan XAML şeması bağlamı, açıkça bir giriş parametresi olmayan API 'Ler kullanarak XAML okuyucuyu veya XAML yazıcısını başlattığınızda dolaylı olarak oluşturulur XamlSchemaContext .

Varsayılan XAML şeması bağlamı, tür eşleme davranışı için CLR Reflection kullanır. Bu, CLR tanımlamayı Type ve ilgili veya ' yi incelemeyi içerir PropertyInfoMethodInfo . Ayrıca, türlerde veya üyelerde CLR attributıon, CLR yedekleme türünü kullanan XAML türü veya XAML üye bilgilerinin özelliklerini doldurmanız için kullanılır. Varsayılan XAML şeması bağlamı, Invoker gerekli BILGILER CLR tür sisteminde kullanılabilir olduğundan, düzen gibi tür sistemi uzantısı teknikleri gerektirmez.

Derleme yükleme mantığı için, varsayılan XAML şeması bağlamı temel olarak XAML ad alanı eşlemelerinde sağlanmış tüm derleme değerlerini kullanır. Ayrıca, LocalAssembly iç türleri yükleme gibi senaryolar için yüklenecek bir derlemeye ipucu verebilir.

WPF XAML şema bağlamı

WPF uygulaması, varsayılan olmayan bir XAML şeması bağlamı uygulayarak sunulabileceğinizi belirten özelliklerin çeşitlerinde ilgi çekici bir resim sağladığından, bu konuda açıklanan WPF XAML şema bağlamıdır. Ayrıca, XAML şeması bağlam kavramı, WPF XAML ile ilgili WPF belgelerinde çok daha açıklanmaz; XAML şeması bağlamının izin veren davranışı, varsayılan XAML şeması bağlamının nasıl çalıştığına ilişkin bir tartışmayla tümleşikse yalnızca tam olarak anlaşılabilir. WPF XAML şeması bağlamı aşağıdaki davranışı uygular.

Arama geçersiz kılmaları: WPF, parametresiz xaml içerik özelliklerinin bulunduğu XAML için birkaç içerik modeline sahiptir . LookupContentProperty WPF için geçersiz kılmalar bu davranışı uygular.

WPF ifadeleri Için deferral: WPF, bir değeri bir çalışma zamanı bağlamı kullanılabilir olana kadar erteler birkaç ifade sınıfını sunar. Ayrıca, şablon genişletmesi erteleme tekniklerine dayanan bir çalışma zamanı davranışıdır.

Sistem arama Iyileştirmeleri yazın: WPF, çok sayıda WPF tanımlı sınıfa devredilen temel sınıf üye tanımları dahil olmak üzere kapsamlı bir XAML sözlüğüne ve nesne modeline sahiptir. Ayrıca, WPF 'in kendisi birçok derlemeye 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 iyileştirmeleri sağlar. Arama tablosunda türlerin bulunmadığı durumlarda, davranış varsayılan XAML şeması bağlamına benzeyen XAML şeması bağlam tekniklerini kullanır.

XamlType ve XamlMember uzantısı: WPF, bağımlılık özellikleriyle Özellik kavramlarını ve yönlendirilmiş olaylar ile olay kavramlarını genişletir. Bu kavramları XAML işleme işlemlerinde daha fazla görünürlük sağlamak için WPF XamlType ve XamlMember ' ı genişletir ve bağımlılık özelliği ve yönlendirilmiş olay özelliklerini veren iç özellikler ekler.

WPF XAML şema bağlamına erişme

WPF veya WPF tabanlı XAML teknikleri kullanıyorsanız System.Windows.Markup.XamlReaderSystem.Windows.Markup.XamlWriter , bu xaml okuyucu ve XAML yazıcı UYGULAMALARıNDA WPF XAML şema bağlamı zaten kullanımda.

WPF XAML şema bağlamı ile başlatılmamış diğer XAML okuyucuyu veya XAML yazıcı uygulamalarını kullanıyorsanız, ' den çalışan bir WPF XAML şema bağlamı alabilirsiniz XamlReader.GetWpfSchemaContext . Daha sonra bu değeri, kullanan diğer API için başlatma olarak kullanabilirsiniz XamlSchemaContext . Örneğin, XamlXmlReader başlatma ve WPF XAML şema bağlamını geçirme için çağrı yapabilirsiniz. Ya da XAML türü sistem işlemleri için WPF XAML şema bağlamını kullanabilirsiniz. Bu, bir veya ' nin oluşturma başlatmasını içerebilir XamlTypeXamlMemberXamlSchemaContext.GetXamlType .

WPF XAML 'nin belirli yönlerine saf XAML düğüm akışı perspektiflerinden eriştiğinizde, bazı WPF çerçevesi özelliklerinden henüz işlem yapılmamış olabileceğini unutmayın. Örneğin, denetimler için WPF şablonları henüz uygulanmadı. Bu nedenle, çalışma zamanında bir tam görsel ağaç ile doldurulmuş olabilecek bir özelliğe erişmeniz durumunda yalnızca bir şablona başvuran bir özellik değeri görebilirsiniz. WPF biçimlendirme uzantıları için belirtilen hizmet bağlamı, çalışma zamanı olmayan bir durumdan sağlanmışsa doğru olmayabilir ve bir nesne grafiği yazmaya çalışırken özel durumlara neden olabilir.

XAML ve derleme yükleme

XAML ve .NET XAML Hizmetleri için derleme yükleme, CLR tarafından tanımlanan kavramla tümleştirilir AppDomain . XAML şeması bağlamı, AppDomain ve diğer faktörlerin kullanımına göre, çalışma zamanında veya tasarım zamanında derlemelerin nasıl yükleneceğini ya da türlerin nasıl bulunacağını yorumlar. Mantıksal, XAML 'in XAML okuyucu için gevşek XAML olmasına bağlı olarak biraz farklılık gösterebilir, XAML 'in bir DLL 'ye tarafından derlenmesi XamlBuildTask veya WPF tarafından oluşturulan BAML PresentationBuildTask .

WPF için XAML şeması bağlamı WPF uygulama modeliyle tümleştirilir ve bu da AppDomain WPF uygulama ayrıntıları olan diğer faktörleri de kullanır.

XAML okuyucu girişi (gevşek XAML)

  1. XAML şeması bağlamı, AppDomain en son yüklenen derlemeden başlayarak, adın tüm yönlerini karşılayan, önceden yüklenmiş bir derlemeyi arayarak uygulamanın içinde yinelenir. Bir eşleşme bulunursa, bu derleme çözümleme için kullanılır.

  2. Aksi takdirde, Assembly bir derlemeyi yüklemek IÇIN clr API 'sini temel alan aşağıdaki tekniklerin biri kullanılır:

XamlBuildTask

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

İçindeki derleme başvurularının XamlBuildTask her zaman tam nitelikli olduğunu unutmayın.

  1. Assembly.Load(String)Tam adı arayın.

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

BAML (PresentationBuildTask)

BAML için derleme yükleme iki yönü vardır: bir bileşen olarak BAML 'yi içeren ilk derlemeyi yükleme ve BAML üretimi tarafından başvurulan herhangi bir tür için tür temelli derlemeleri yükleme.

İlk biçimlendirme için derleme yükü:

Biçimlendirmeyi yükleyecek derlemenin başvurusu her zaman nitelenmemiş olur.

  1. WPF XAML şeması bağlamı, AppDomain en son yüklenen derlemeden başlayarak, adın tüm yönlerini karşılayan, önceden yüklenmiş bir derlemeyi arayarak WPF uygulamasının içinde yinelenir. Bir eşleşme bulunursa, bu derleme çözümleme için kullanılır.

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

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

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

  1. WPF XAML şeması bağlamı, AppDomain en son yüklenen derlemeden başlayarak, adın tüm yönlerini karşılayan, önceden yüklenmiş bir derlemeyi arayarak WPF uygulamasının içinde yinelenir. Bir 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:

    • Assembly.Load(String)Tam adı arayın.

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

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

Ayrıca bkz.