XAML İçin Tür Dönüştürücüleri ve İşaretleme Uzantıları

Tür dönüştürücüleri ve işaretleme uzantıları, XAML türü sistemlerinin ve XAML yazıcılarının nesne grafı bileşenleri oluşturmak için kullandığı iki tekniktir. Bazı özellikleri paylaşsalar da, tür dönüştürücüleri ve işaretleme uzantıları bir XAML düğüm akışında farklı temsil edilir. Bu belge kümesinde tür dönüştürücüleri, işaretleme uzantıları ve benzer yapılar bazen toplu olarak değer dönüştürücüleri olarak adlandırılır.

Değer Dönüştürücüleri

XAML'de değer dönüştürücüleri çeşitli senaryolar için kullanılır. Aşağıdaki listede XAML'deki farklı türlerdeki değer dönüştürücüleri gösterilmektedir:

  • Tür dönüştürücü

  • İşaretlemeyi genişletme

  • Değer serileştiricisi

  • XAML metin söz dizimi için mantık sağlayan ilgili sınıf veya destek sınıfı

Tür Dönüştürücüleri

.NET XAML Hizmetleri tanımında, tür dönüştürücüleri CLR TypeConverter sınıfından türetilen sınıflardır. TypeConverter , XAML mevcut olmadan önce .NET'te bulunan bir sınıftır. Özgün amacı, IDE özellikleri için özellik pencerelerini ve benzer metin tabanlı düzenleme metaforlarını desteklemekti. .NET'e XAML'nin girişinde, metin söz dizimini (öznitelik değerinde veya XAML değer düğümünde bulunduğu gibi) nesneye dönüştürmek için kullanılır TypeConverter . TypeConverter bir nesne değerini metin söz dizimine seri hale getirmek için de kullanılabilir. TypeConverter , Windows Presentation Foundation (WPF) ve Windows Communication Foundation(WCF) içindeki önceki çerçeveye özgü XAML uygulamalarında da kullanılmıştır. in XAML hakkında TypeConverter daha fazla bilgi için bkz . XAML için Tür Dönüştürücülerine Genel Bakış.

İşaretleme Uzantıları

.NET XAML Hizmetleri uygulamasında, işaretleme uzantıları sınıfından MarkupExtension türetilen sınıflardır. biçimlendirme uzantıları, bu formda XAML dilinden kaynaklanan bir kavramdır. Bir işaretleme uzantısını, mantığını sağlamak için bir hizmet sınıfına çağıran genişletilebilir bir kaçış dizisi gibi düşünebilirsiniz. İşaretleme açısından, XAML işlemcileri biçimlendirme uzantısını bir metin dizesindeki bir açma ayracı ({) ile başlayan bir metin dizisiyle evrensel olarak tanır.

İşaretlem uzantıları, tür dönüştürücülerinden farklıdır. Tür dönüştürücüleri genellikle tür veya üyelerle ilişkilendirilir. Bir nesne grafı oluşturma veya serileştirme, bu varlıklarla ilişkili metin söz dizimi ile karşılaştığında çağrılır.

İşaretleme uzantıları tek bir destekleyici hizmet sınıfıyla ilişkilendirilir, ancak herhangi bir üye değeri için uygulanabilir. (Bununla birlikte, hizmet bağlamını kullanarak belirli üyeler veya hedef türleriyle kullanımını kasıtlı olarak kısıtlamak için işaretleme uzantınızı uygulayabilirsiniz.) İşaretlemeyi uzantıları bir tür dönüştürücü ilişkilendirmesini geçersiz kılabilir. Alternatif olarak, metin söz dizimlerini desteklemeyen üyeler için bir öznitelik değeri belirtmek için de kullanabilirsiniz.

XAML için işaretleme uzantısı uygulama düzeni hakkında daha fazla bilgi için bkz . XAML için biçimlendirme uzantılarına genel bakış.

Değer Serileştiricileri

A ValueSerializer , nesneyi dizeye dönüştürmek için iyileştirilmiş özel bir tür dönüştürücüdür. XAML için A ValueSerializer , yöntemini hiç uygulamayabilir ConvertFrom . Uygulama ValueSerializer , hizmetleri uygulama gibi bir TypeConverter şekilde alır. Sanal yöntemler bir giriş context parametresi sağlar. context parametresi, arabiriminden IServiceProvider devralan ve bir GetService yöntemi olan türündedirIValueSerializerContext.

XAML türü sisteminde ve serileştirme için XAML düğüm döngüsü işlemeyi kullanan XAML yazıcı uygulamalarında, bir tür veya üyeyle ilişkili bir değer dönüştürücüsü kendi XamlType.ValueSerializer özelliği tarafından bildirilir. Serileştirme gerçekleştiren XAML yazıcılarının anlamı, ve XamlType.TypeConverterXamlType.ValueSerializer varsa, yük yolu için tür dönüştürücüsü ve kaydetme yolu için değer serileştiricisinin kullanılması gerektiğidir. Varsa XamlType.TypeConverter ancak XamlType.ValueSerializer ise null, kayıt yolu için tür dönüştürücüsü de kullanılır.

Diğer Değer Dönüştürücüleri

Değer dönüştürücüsü, tür dönüştürücüsünün veya işaretleme uzantısının belirli desenlerinin ötesinde genişletilebilir. Ancak, bu özelleştirme .NET XAML Hizmetleri tarafından sağlanan XAML türü sisteminin yeniden tanımlanmasını da gerektirir. Mevcut XAML türü sistemi, tür dönüştürücüleri, işaretleme uzantıları ve değer serileştiricileri için gösterimlere ve raporlama sistemlerine sahiptir, ancak özel değer dönüştürme biçimleri için değildir. Özel değer dönüştürücüleri oluşturmak istiyorsanız türünü kullanın XamlValueConverter<TConverterBase> .

Tür Dönüştürücüleri ve İşaretlemeyi Birlikte Uzantıları

biçimlendirme uzantıları ve tür dönüştürücüleri XAML'deki farklı durumlar için kullanılır. biçimlendirme uzantısı kullanımları için bağlam kullanılabilse de, işaretleme uzantısının değer sağladığı özelliklerin tür dönüştürme davranışı genellikle işaretleme uzantısı uygulamalarında işaretlenmez. Başka bir deyişle, bir işaretleme uzantısı çıktı olarak ProvideValue bir metin dizesi döndürse bile, belirli bir özellik veya özellik değeri türüne uygulandığı gibi bu dizede tür dönüştürme davranışı çağrılmıyor. Genellikle, işaretleme uzantısının amacı bir dizeyi işlemek ve herhangi bir tür dönüştürücü içermeden bir nesne döndürmektir.

Değer Dönüştürücüsü için Hizmet Bağlamı

Bir değer dönüştürücüsü uyguladığınızda, genellikle değer dönüştürücüsunun uygulandığı bir bağlama erişmeniz gerekir. Bu bağlam hizmet bağlamı olarak bilinir. Hizmet 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. Değer dönüştürücüsü için kullanılabilen hizmet bağlamları ve bir hizmet bağlamı tarafından sağlanabilir hizmetlere erişme hakkında daha fazla bilgi için bkz . Tür Dönüştürücüleri ve İşaretleme Uzantıları için Kullanılabilir Hizmet Bağlamları.

Ayrıca bkz.