Tür Dönüştürücülerinde ve İşaretleme Uzantılarında Kullanılabilir Hizmet Bağlamları
Tür dönüştürücü ve işaretleme uzantısı kullanımlarını destekleyen türlerin yazarları genellikle bir kullanımın işaretlemede veya çevresindeki nesne grafı yapısında nerede bulunduğu hakkında bağlamsal bilgilere sahip olmalıdır. Sağlanan nesnenin doğru şekilde örneklenebilmesi veya nesne grafında var olan nesnelere nesne başvuruları yapılabilmesi için bilgi gerekebilir. .NET XAML Hizmetleri kullanılırken, gerekli olabilecek bağlam bir dizi hizmet arabirimi olarak kullanıma sunulur. Tür dönüştürücüsü veya işaretleme uzantısı destek kodu, kullanılabilir ve veya ilgili türlerden XamlObjectWriter geçirilen bir hizmet sağlayıcısı bağlamı kullanarak bir hizmeti sorgulayabilir. XAML şema bağlamı, bu tür bir hizmet aracılığıyla doğrudan kullanılabilir. Bu konu, değer dönüştürücü uygulamasından hizmet bağlamlarına nasıl erişeceklerini açıklar ve genellikle kullanılabilir hizmetleri ve bunların rollerini listeler.
Hizmetleri Alma
Bir değer dönüştürücüsünün uygulayıcısı olarak, genellikle değer dönüştürücüsünün uygulandığı bir bağlam türüne erişmeniz gerekir. Bu bağlam, etkin XAML şema bağlamı, XAML şema bağlamı ve XAML nesne yazıcısının sağladığı tür eşleme sistemine erişim gibi bilgileri içerebilir. Bir işaretleme uzantısı veya tür dönüştürücü uygulaması için kullanılabilen hizmetler, her sanal yöntemin imzasının parçası olan bağlam parametreleri aracılığıyla iletilir. Her durumda, bağlamı uyguladınız IServiceProvider ve bir hizmet istemek için çağırabilirsiniz IServiceProvider.GetService .
İşaretlemeyi Genişletme Hizmetleri
MarkupExtension yalnızca bir sanal yöntemi vardır: ProvideValue. Giriş serviceProvider
parametresi, işaretleme uzantısı bir XAML işlemcisi tarafından çağrıldığında hizmetlerin uygulamalarla nasıl iletişim kuracaklarıdır. Aşağıdaki sahte kod, bir işaretleme uzantısı uygulamasının içindeki ProvideValuehizmetler için nasıl sorgu oluşturabileceğini gösterir:
public override object ProvideValue(IServiceProvider serviceProvider)
{
//...
// Get the IXamlTypeResolver from the service provider
if (serviceProvider == null)
{
throw new ArgumentNullException("serviceProvider");
}
IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver;
if (xamlTypeResolver == null)
{
throw new ArgumentException("IXamlTypeResolver");
}
//...
}
Tür Dönüştürücü hizmetleri
TypeConverter bir hizmet bağlamı kullanan ve XAML kullanımını destekleyen dört sanal yönteme sahiptir. Bu yöntemlerin her biri bir giriş context
parametresi geçirir. Bu parametre türündedir ITypeDescriptorContext, ancak bu arabirim devralır IServiceProviderve bu nedenle, tür dönüştürücü uygulamaları için kullanılabilecek bir GetService yöntem vardır.
Aşağıdaki sahte kod, XAML kullanımları için tür dönüştürücü uygulamasının geçersiz kılmalarından birinde hizmetleri nasıl sorgulayabileceğini gösterir. Bu durumda ConvertFrom:
public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext,
CultureInfo cultureInfo,
object source)
{
IRootObjectProvider rootProvider = typeDescriptorContext.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
if (rootProvider != null && source is String)
{
//return something, else ...
}
throw GetConvertFromException(source);
}
Değer Seri Hale Getirici hizmetleri
Değer seri hale getirici bağlamı için sınıfına ValueSerializer IValueSerializerContextözgü bir hizmet sağlayıcısı türü kullanırsınız. Bu bağlam, dört ValueSerializer sanal yöntemin geçersiz kılmalarına geçirilir. Hizmetleri almak için bağlamdan çağrısı GetService .
XAML Hizmet Sağlayıcısı Bağlamlarını Kullanma
biçimlendirme uzantıları veya tür dönüştürücüleri için kullanılabilen XAML hizmetlerine erişim için GetService hizmet sağlayıcısı, iç sınıf olarak uygulanır ve yalnızca arabirim aracılığıyla kullanıma sunulur ve ilgili bağlama nasıl geçirilir. Yük yolunun veya kaydetme yolunun varsayılan .NET XAML Hizmetleri uygulamalarında bir XAML işleme işlemi, hizmet bağlamı gerektiren ilgili işaretleme uzantısını veya tür dönüştürücü yöntemlerini çağırsa, bu iç nesne geçirilir. Duruma bağlı olarak, sistem hizmeti bağlamı ya da MarkupExtensionContext
TextSyntaxContext
sağlar, ancak bu sınıfların her ikisinin de özellikleri dahilidir. Bu sınıflarla etkileşiminiz, aracılığıyla GetServicehizmet istemekle sınırlıdır.
.NET XAML Hizmet Bağlamından Kullanılabilir Hizmetler
.NET XAML Hizmetleri işaretleme uzantıları, tür dönüştürücüleri, değer serileştiricileri ve diğer kullanımlar için hizmetleri tanımlar. Aşağıdaki bölümlerde bu hizmetlerin her biri açıklanır ve hizmetin bir uygulamada nasıl kullanılabileceğini gösteren yönergeler sağlanır.
IServiceProvider
Başvuru belgeleri: IServiceProvider
İlgili: .NET'te hizmet tabanlı bir altyapının temel işlemidir, böylece öğesini çağırabilirsiniz IServiceProvider.GetService.
ITypeDescriptorContext
Başvuru belgeleri: ITypeDescriptorContext
'den IServiceProvidertüretilir. Bu sınıf standart TypeConverter imzalardaki bağlamı temsil eder; TypeConverter .NET Framework 1.0'dan beri var olan bir sınıftır. Dize-değer türü dönüştürme için XAML ve XAML TypeConverter senaryosundan önce kullanılır. .NET XAML Hizmetleri bağlamında yöntemleri TypeConverter açıkça uygulanır. Açık uygulamanın davranışı, çağıranlara ITypeDescriptorContext API'nin XAML türü sistemleri veya XAML'den nesne okuma veya yazma için uygun olmadığını gösterir. Container, Instanceve PropertyDescriptor genel olarak .NET XAML Hizmetleri bağlamlarından geri döner null
.
IValueSerializerContext
Başvuru belgeleri: IValueSerializerContext
türetilir ITypeDescriptorContext ve ayrıca XAML türü sistemiyle ilgili yanlış etkileri bastırmak için açık uygulamaları temel alır. üzerinde ValueSerializerstatik arama yardımcı yöntemlerini destekler.
IXamlTypeResolver
Başvuru belgeleri: IXamlTypeResolver
Tanımlanan: System.Windows.Markup ad alanı, System.Xaml derlemesi
İlgili: Yükleme yolu senaryoları ve XAML şema bağlamı ile etkileşim
Hizmet API'si: Resolve
XAML yazıcısı bir nesne grafında bir CLR nesnesi oluştururken gerekli olan XAML-CLR tür eşlemesini etkileyebilir. Resolve bir XAML türü adına () karşılık gelen ön ek nitelikli bir dizeyi işlerXamlType.Name ve bir CLR Typedöndürür. Türleri çözümlemek genellikle XAML şema bağlamı üzerinde büyük ölçüde bağımlıdır. Yalnızca XAML şema bağlamı, hangi derlemelerin yüklendiği ve bu derlemelerden hangilerinin tür çözümlemesi için erişilebileceği veya erişilmesi gerektiği gibi konuların farkındadır.
IUriContext
Başvuru belgeleri: IUriContext
Tanımlanan: System.Windows.Markup ad alanı, System.Xaml derlemesi
İlgili: Yolu yükleyin ve URI'ler veya x:Uri
değerler olan üye değerlerinin yol işlemesini kaydedin.
Hizmet API'si: BaseUri
Bu hizmet, varsa genel olarak kullanılabilir bir URI kökü bildirir. URI kökü, göreli URI'leri mutlak URI'lere çözümlemek için veya tam tersi için kullanılabilir. Bu senaryo temel olarak belirli bir çerçeve tarafından kullanıma sunulan uygulama hizmetleriyle veya bir çerçevede sık kullanılan bir kök öğe sınıfının özellikleriyle ilgilidir. Temel URI, daha sonra XAML nesne yazıcısına geçirilip bu hizmet tarafından bildirilen bir XAML okuyucu ayarı olarak oluşturulabilir.
IAmbientProvider
Başvuru belgeleri: IAmbientProvider
Tanımlanan: System.Xaml ad alanı, System.Xaml derlemesi
İlgili: Yük yolu işleme ve tür arama ertelemeleri veya iyileştirmeleri.
Hizmet API'leri: GetAllAmbientValues, üç diğer.
XAML'deki ambiyans kavramı, bir türün belirli bir üyesini ortam olarak işaretlemeye yönelik bir tekniktir. Alternatif olarak, türün bir örneğini barındıran tüm özellik değerlerinin ortam özellikleri olarak kabul edilmesi için bir tür ortam olabilir. XAML düğüm akışı boyunca daha ileri gelen ve nesne grafında alt öğeler olan işaretleme uzantıları veya tür dönüştürücüleri, ortam özelliğine veya tür örneğine yükleme zamanında erişebilir; veya ortam yapısıyla ilgili bilgileri zaman tasarrufunda kullanabilir. Bu, veya gibi diğer hizmetlerin türlerini çözümlemek için gereken niteleme derecesini IXamlTypeResolver x:Type
etkileyebilir. Ayrıca AmbientPropertyValuebkz. .
IXamlSchemaContextProvider
Başvuru belgeleri: IXamlSchemaContextProvider
Tanımlanan: System.Xaml ad alanı, System.Xaml derlemesi
İlgili: Yükleme yolu ve bir XAML türünü bir yedekleme türüne çözümlemesi gereken tüm işlemler.
Hizmet API'si: SchemaContext
Ertelenen içeriği tümleştirmek için aynı şema bağlamı ertelenen alan üzerinde işlem yapması gerektiğinden, XAML şema bağlamı tüm erteleme yük işlemleri için gereklidir. XAML şema bağlamının rolü hakkında daha fazla bilgi için bkz . XAML Hizmetleri.
IRootObjectProvider
Başvuru belgeleri: IRootObjectProvider
Tanımlanan: System.Xaml ad alanı, System.Xaml derlemesi
İlgili: Yükleme yolu.
Hizmet API'si: RootObject
Hizmet, belirli bir çerçeve tarafından veya bir çerçevede sık kullanılan bir kök öğe sınıfının özellikleriyle kullanıma sunulan uygulama hizmetleriyle ilgilidir. Kök nesneyi elde etmek için bir senaryo arka plan kodu ve olay kablolarını bağlamaktır. Örneğin, WPF uygulaması x:Class
, XAML işaretlemesinde başka bir konumda bulunan herhangi bir olay işleyicisi özniteliğinin işaretleme derlemesi ve kablolandırılması için kullanılır. İşaretlemeyi derlemek için işaretleme ve kod arkası tanımlı kısmi sınıfların bağlantı noktası kök öğesindedir.
IXamlNamespaceResolver
Başvuru belgeleri: IXamlNamespaceResolver
Tanımlanan: System.Xaml ad alanı, System.Xaml derlemesi
İlgili: Yükleme yolu, kaydetme yolu.
Hizmet API'si: GetNamespace yükleme yolu için, GetNamespacePrefixes kaydetme yolu için.
IXamlNamespaceResolver , kaynak XAML işaretlemesinde eşlendiği şekilde ön ekine göre bir XAML ad alanı tanımlayıcısı / URI döndürebilen bir hizmettir.
IProvideValueTarget
Başvuru belgeleri: IProvideValueTarget
Tanımlanan: System.Windows.Markup ad alanı, System.Xaml derlemesi
İlgili: Yolu yükleme ve kaydetme yolu.
Hizmet API'leri: TargetObject, TargetProperty.
IProvideValueTarget , yük zamanında nerede davrandığı hakkında bağlam elde etmek için bir tür dönüştürücüsü veya işaretleme uzantısını etkinleştirir. Uygulamalar bu bağlamı kullanarak bir kullanımı geçersiz kabilir. Örneğin, WPF'nin gibi DynamicResourceExtensionbazı işaretleme uzantılarında mantığı vardır. Mantık, uzantının yalnızca bağımlılık özelliklerini (veya diğer bağımlılık dışı özelliklerin kısa bir listesini) ayarlamak için kullanıldığından emin olmak için öğesini denetler TargetProperty .
IXamlNameResolver
Başvuru belgeleri: IXamlNameResolver
Tanımlanan: System.Xaml ad alanı, System.Xaml derlemesi
İlgili: Yük yolu nesne grafı tanımı, , x:Reference
veya çerçeveye özgü tekniklerle tanımlanan x:Name
nesneleri çözümleme.
Hizmet API'leri: Resolve; ileriye doğru başvurularla ilgilenme gibi daha gelişmiş senaryolar için diğer API'ler.
.NET XAML Services işleme uygulaması x:Reference
bu hizmete bağlıdır. Çerçeveyi destekleyen belirli çerçeveler veya araçlar, bu hizmeti işleme veya eşdeğer (RuntimeNamePropertyAttributeöznitelikli) özellik işleme için x:Name
kullanır.
IDestinationTypeProvider
Başvuru belgeleri: IDestinationTypeProvider
Tanımlanan: System.Xaml ad alanı, System.Xaml derlemesi
İlgili: Dolaylı CLR türü bilgilerinin yük yolu çözümlemesi.
Hizmet API'si: GetDestinationType
Daha fazla bilgi için bkz. IDestinationTypeProvider.
Ayrıca bkz.
.NET Desktop feedback