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 ValueSerializerIValueSerializerContextö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 MarkupExtensionContextTextSyntaxContextsağ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 IXamlTypeResolverx:Typeetkileyebilir. 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:Referenceveya çerçeveye özgü tekniklerle tanımlanan x:Namenesneleri çö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.