Aracılığıyla paylaş


TypeConverters ve XAML

Bu konuda genel bir xaml dil özelliği olarak dizesinden tür dönüştürmesi amacı tanıtır. İçinde.net Framework, TypeConverter sınıf yönetilen özel bir sınıf özellik değer olarak kullanılabilecek bir uygulama parçası olarak belirli bir amaca hizmet edenxaml öznitelik kullanımı. Özel bir sınıf yazmak ve xaml ayarlanabilir öznitelik değerleri kullanılabilir durumda olması için sınıfın örneği istiyorsanız, uygulamak gerekebilir bir TypeConverterAttribute , sınıfınız için özel bir Yaz TypeConverter sınıf ya da her ikisini birden.

Bu konu aşağıdaki bölümleri içerir.

  • Tür dönüştürme kavramları
  • Uygulama türü dönüştürücü
  • TypeConverterAttribute uygulama
  • İlgili Konular

Tür dönüştürme kavramları

xaml ve dize değerleri

xaml dosyasında öznitelik değerini ayarladığınızda, bu değer başlangıç türünü bir saf metin dizesidir. Hatta diğer ilkel gibi Double Başlangıçta metin dizeleridir bir xaml işlemci.

xaml işlemci, bir öznitelik deðerinin işlemek için iki bilgi parçalarını gerekiyor. İlk değer türü ayarlı özelliğinin bilgidir. Bir öznitelik değeri tanımlayan ve xaml içinde işlenen herhangi bir dize sonuçta dönüştürülen veya gerekir bu tür değerine çözümlenen. Değer (örneğin, sayısal bir değer) xaml çözümleyici tarafından anlaşılan bir temel ise, doğrudan bir dize dönüştürme denemesi yapılır. Bir numaralandırma değeri ise, dize adı eşleşen Bu numaralandırma adlandırılmış bir sabite denetlemek için kullanılır. Değeri ne ayrıştırıcı anlaşılan primitive ne de bir sıralama, söz konusu türü ise, bir örneğini türü veya dönüştürülen dizesini temel alan bir değer sağlaması olmalıdır. Bu tür dönüştürücüsü sınıfı belirterek yapılır. Türü dönüştürücü verimli kod içinde çağrıları için xaml senaryo için hem de büyük bir olasılıkla başka bir sınıf değerlerini sağlamak için yardımcı sınıfıdır.net kodu.

xaml var türü dönüştürme davranışını kullanan

Alttaki xaml kavramları ile kendi benzerlik bağlı, zaten türü dönüştürme davranışını temel uygulama xaml resminize fark etmeden kullanıyor olabilirsiniz. Örneğin, wpf türünde bir deðer alabilir özellikleri yüzlerce tanımlar Point. A Point iki boyutlu koordinat alanında bir koordinat açıklayan bir değerdir ve aslında iki önemli özelliğe sahiptir: X and Y. xaml içinde bir noktayı belirtmek, bir dize sınırlayıcı (genellikle virgül) ile arasında belirtmeniz X ve Y , sağladığınız değerler. For example: <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">.

Bu basit tür bile Point ve xaml basit, kullanımı bir tür dönüştürücü. Bu durumda, sınıftır PointConverter.

Türü dönüştürücü Point markup kullanımı tüm özelliklerin, ele tanımlanan sınıf düzeyi streamlines en Point. Aşağıdaki gerekir türü dönüştürücü Burada, daha önce gösterilen aynı örneğin daha ayrıntılı biçimlendirme:

<LinearGradientBrush>

<LinearGradientBrush.StartPoint>

<Point X="0" Y="0"/>

</LinearGradientBrush.StartPoint>

<LinearGradientBrush.EndPoint>

<Point X="1" Y="1"/>

</LinearGradientBrush.EndPoint>

<LinearGradientBrush>

Tür dönüştürme dizesi ya da daha ayrıntılı bir eşdeğer sözdizimini kullanıp kullanmayacağınızı genellikle bir kodlama stili seçimdir. xaml alet iş akışınız, değerleri nasıl ayarlanır etkileyen. Bazı xaml Araçlar gidip gelmeye gerek Tasarımcı görünümleri veya kendi dizileştirme mekanizmasını daha kolay olduğu için en ayrıntılı form biçimlendirme yayma eğilimindedir.

Varolan türü dönüştürücüler genellikle keşfedilen üzerinde wpf ve..NET Framework türleri bir sınıf (veya özellik) denetleyerek varlığını bir uygulanan için TypeConverterAttribute. Bu öznitelik değerleri xaml amaçlarıyla yanı olabilecek başka amaçlar için bu tür destek türü dönüştürücü olan sınıf olarak adlandıracaktır.

Türü dönüştürücüler ve işaretleme uzantıları

Biçimlendirme uzantıları ve türü dönüştürücüleri xaml işlemci davranış ve uygulanmış olan senaryolar birbirine dik rolleri doldurun. İçeriği biçimlendirme uzantısı kullanımları için kullanılabilir olsa da, burada bir biçimlendirme uzantısı bir değer genellikle sağlar özellikler türü dönüştürme davranışını işaretleme uzantısı uygulamalarında denetlenmez. Başka bir deyişle, bir biçimlendirme uzantısı bir metin dizesi olarak dönse bile, ProvideValue Çıkış, belirli bir özellik veya özellik değeri türü için uygulanan bu dize türü dönüştürme davranış değil çağrıldığında, genellikle, bir dize işleme ve nesne türü dönüştürücü herhangi olmadan katılan dönmek için bir biçimlendirme uzantısı amacı budur.

Biçimlendirme uzantısı türü dönüştürücü yerine gerekli olduğu bir ortak zaten bir nesneye bir başvuru yapmak için durumdur. En iyi durum bilgisi olmayan türü dönüştürücü yalnızca arzu olmayabilir yeni bir örneğini oluşturabilir. Biçimlendirme uzantıları hakkında daha fazla bilgi için bkz: Biçimlendirme Uzantıları ve WPF XAML.

Doğal türü dönüştürücüler

wpf, ve.net Framework uygulaması xaml ayrıştırıcı, doğal türü dönüştürme olması, ancak geleneksel olarak ilkel düşünülen türleri değil bazı türleri vardır. Böyle bir tür örneğidir DateTime. Bunun nedeni hakkında temel alır.net Framework mimarisini çalışır: türü DateTime mscorlib, en temel Kitaplığı'nda tanımlanır.net. DateTimebağımlılık tanıtan başka bir derlemesinden gelen özniteliği ile yazarından izin verilmez (TypeConverterAttribute sistemden ise) her zamanki türü dönüştürücü bulma düzeneği öznitelik atanıyor tarafından desteklenen olacak. Bunun yerine, xaml ayrıştırıcı doğal gibi işlemlere gerek türlerinin bir listesi vardır ve bunlar doğru ilkel nasıl işleneceğini benzer şekilde işler. (Durumunda DateTime Bu bir çağrı içerir Parse.

Uygulama türü dönüştürücü

TypeConverter

De Point Örnek verilen önceden, sınıfı PointConverter değinilen. İçin.net uygulamaları XAML xaml amaçlar için kullanılabilecek tüm türü dönüştürücüler olan temel sınıfından türeyen sınıflar TypeConverter. TypeConverter Class sürümlerinde vardı.xaml; varlığını önce .NET Framework Dize dönüştürme özelliği diyaloglarda görsel Tasarımcılar için sağlamak için kendi özgün kullanımları biri oldu. xaml, rolü için TypeConverter biçimdedir dahil edilen - dize için temel sınıf ve karşı-dize dönüştürmeleri dize özniteliği değeri, ayrıştırma ve büyük olasılıkla belirli nesne özelliği bir dize seri hale getirme gibi yeniden içine çalışma değeri'ni işlemeyi etkinleştirbir öznitelik.

TypeConverterdizeleri xaml işleme amacıyla gelen ve dönüştürmek için uygun olan dört üye tanımlar:

Bunların en önemli yöntemdir ConvertFrom. Bu yöntem, Giriş dizesi gerekli nesne türüne dönüştürür. Aslýna, ConvertFrom yöntemin ne kadar geniş dönüştürücü 's amaçlanan hedef türü türe dönüştürmek ve böylece çalışma zamanı dönüşümleri destekleme gibi xaml ötesine uzanan amaçlara hizmet eder, ancak xaml amacıyla işleyebileceği kod yolu olan bir String Giriş Bu konularla.

Sonraki en önemli yöntem ConvertTo. (Örneğin, xaml dosyası olarak kaydedilmişse) bir biçimlendirme gösterimine uygulama dönüştürülmüş ise, ConvertTo sorumludur üreterek bir biçimlendirme gösterim. Geçirdiğinizde, bu durumda, xaml için önemlidir kod yoldur bir destinationType , String .

CanConvertTove CanConvertFrom yeteneklerini bir hizmetine sorguladığında, kullanılan destek yöntemlerdir TypeConverter uygulaması. Geri dönmek için bu yöntemi uygulamalısınız true türüne özgü durumda eşdeğer dönüştürme yöntemleri dönüştürücü desteği. xaml amacıyla genellikle yani String türü.

Kültür bilgileri ve xaml türü dönüştürücüler

Her TypeConverter uygulaması kendi yorumunu ne oluşturan bir dönüşümü için geçerli bir dize olan ve ayrıca kullanın veya Yoksay parametreleri olarak geçirilen tür açıklaması Kültür ve xaml tür dönüştürmesi önemli bir etken vardır. Yerelleştirilebilir dizeler öznitelik değerleri kullanarak tamamen xaml tarafından desteklenir. Ancak belirli kültür gereksinimleri ile Dönüştürücüsü'nde giriş türü desteklenmiyor, mutlaka sabit dil ayrıştırma davranış türü dönüştürücüleri xaml öznitelik değerleri içerdiğinden dolayı yerelleştirilebilir dize kullanarak, kullanarak en-US kültür. Bu kısıtlama tasarım nedenleri hakkında daha fazla bilgi için xaml dil belirtimi danışmalısınız ([ms-xaml]).

Kültür sorunu burada olabilir örneğin, bazı kültürler sayılar için ondalık ayırıcı olarak virgül kullanın. Bu ayırıcı olarak virgül kullanın olan birçok wpf xaml türü dönüştürücüleri bulunur, davranışı ile çarpışır (ortak x gibi tarihsel etkileyenleri bağlı olarak, y form veya virgülle ayrılmış listeler). Hatta bir kültür içinde çevredeki xaml geçirerek (ayarı Language veya xml:lang için sl-SI kültür, bu yolla ondalık virgül kullandığı bir kültür örneği) sorunu çözmüyor değil

ConvertFrom uygulama

Olarak kullanılabilir bir TypeConverter xaml, destekleyen uygulama ConvertFrom yöntemi Bu dönüştürücü için gereken bir dize olarak kabul value parametresi. Dize geçerli biçimlendirme ve tarafından dönüştürülebilir olup olmadığını TypeConverter uygulaması, sonra döndürülen nesne cast türü beklenen özellik desteklemesi gerekir Aksi takdirde, ConvertFrom uygulaması gerekir dönmek null.

Her TypeConverter uygulaması sahip kendi yorumunu ne oluşturan bir dönüşümü için geçerli bir dize ve ayrıca kullanın veya türü açıklaması veya kültür bağlamları parametreleri olarak geçirilen Yoksay Ancak, wpf işleme xaml değerleri her durumda türü Açıklama bağlam geçişi için değil ve ayrıca temel kültür geçebilir değil xml:lang.

NotNot

Kaşlı ayraç karakterleri özellikle kullanmayın {, olası bir dize biçiminizin öğesi olarak.Bu karakterler, giriş ve çıkış bir biçimlendirme uzantısı sırası olarak ayrılmıştır.

ConvertTo uygulama

ConvertToPotansiyel seri hale getirme desteği için kullanılır. Seri hale getirme desteği aracılığıyla ConvertTo türünü de özel türünüz için Dönüştürücü olan mutlak bir gereksinim değildir. Bir denetimi uygulamak veya serileştirmek sınıfınızın tasarım veya özellikleri bir parçası kullanarak, size ancak uygulamalısınız ConvertTo.

Olarak kullanılabilir bir TypeConverter xaml, destekleyen uygulama ConvertTo yöntemi Bu dönüştürücü için gereken olarak desteklenen türü (veya bir değer) örneği kabul value parametresi. Zaman destinationType parametresi türü olan String, sonra döndürülen nesne olmalıdır olarak artığını için String. Döndürülen dize seri değeri göstermelidir value. İdeal olarak, seçtiğiniz seri hale getirme biçimi için bu dizeyi geçirildi, aynı değer üretme yeteneğine olmalıdır ConvertFrom uygulaması, aynı dönüştürücü önemli kaybı olmadan bilgi.

Değer getirilemez veya dönüştürücü seri hale getirme, desteklemiyor ConvertTo uygulaması gerekir dönmek nullve bu durumda. istisna izin verilen Ancak bu dönüştürme parçası olarak kullanamamayı istisna atar, bildirin sizin CanConvertTo uygulama böylece en iyi yöntem ile denetleme CanConvertTo özel durumları önlemek için öncelikle desteklenir.

destinationType Parametresi türü String, seçebileceğiniz kendi dönüştürücü işleme. Tipik olarak, temel uygulama işleme, basemost içinde döner ConvertTo harekete geçiren belirli bir özel durum.

CanConvertTo uygulama

Sizin CanConvertTo uygulaması dönmek true için destinationType türü Stringve Aksi takdirde erteleme temel uygulaması.

CanConvertFrom uygulama

Sizin CanConvertFrom uygulaması dönmek true için sourceType türü Stringve Aksi takdirde erteleme temel uygulaması.

TypeConverterAttribute uygulama

Bağlanmasının kullanılmak üzere kendi özel tür Dönüştürücüsü için sırayla gerekir uygulamak için xaml işlemci tarafından özel bir sınıf türü dönüştürücü, .NET Framework attribute TypeConverterAttribute sınıf tanımı. ConverterTypeName Belirterek özniteliği aracılığıyla özel tür dönüştürücüsü tür adı olması gerekir Uygulanan, bu öznitelik ile xaml işlemci değerleri burada sizin özel sınıf türü özellik türü kullanır işlediğinde, onu giriş dizelerini ve nesne örnekleri geri dönün.

Ayrıca, her özellik için ayrı olarak türü dönüştürücü sağlayabilirsiniz. Uygulama yerine bir .NET Framework attribute TypeConverterAttribute sınıf tanımının bir özellik tanımıyla uygulayın (ana tanım değil get/set içindeki uygulamaları). Özellik türü, kendi özel tür dönüştürücüsü tarafından işlenen türüyle eşleşmelidir. Uygulanan, bu özniteliği olan bir XAMLprocessor bu özellik değerlerini işlediğinde, onu giriş dizelerini işlemek ve nesne örnekleri geri dönün. Her özellik türü dönüştürücü tekniği son derece yararlı bir özellik türü seçeneğini kullanmayı seçerseniz Microsoft .NET Framework veya kitaplıktan burada sınıf tanımının denetleyemezsiniz ve uygulanamaz bazı diğer bir TypeConverterAttribute vardır.

Ayrıca bkz.

Başvuru

TypeConverter

Kavramlar

XAML'e Genel Bakış (WPF)

Biçimlendirme Uzantıları ve WPF XAML

Ayrıntılı XAML Sözdizimi