Aracılığıyla paylaş


WPF için XAML ve Özel Sınıflar

Extensible Application Markup Language (XAML)içinde uygulandığı gibi.net destekler özel bir sınıf veya yapı birinde tanımlama yeteneği common language runtime (CLR) Dil ve sınıf kullanarak erişim XAML işaretleme. Bir arada kullanabilirsiniz Windows Presentation Foundation (WPF)-tanımlı türleri ve aynı biçimlendirme dosyası içinde sizin özel türler genellikle özel türler bir xaml ad alanı önekini. eşleyerek Bu konuda özel bir sınıf olarak kullanılabilir yinelenmeyeceği anlatılmaktadır bir XAML öğesi.

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

  • Uygulamalar veya derlemeler özel sınıflar
  • Özel sınıfın bir xaml öğesi olarak gereksinimleri
  • Özel sınıf özellikler xaml nitelikleri için gereksinimler
  • xaml olay işleyicisi öznitelik sözdizimi olaylarında özel sınıf için gereksinimler
  • Yazı koleksiyon özellikleri
  • xaml içerik özelliklerini bildirmek
  • xaml seri hale getirilmedi.
  • İlgili Konular

Uygulamalar veya derlemeler özel sınıflar

Kullanılan özel sınıflar XAML iki farklı şekilde tanımlanabilir: arka planda veya birincil üreten diğer kod içinde Windows Presentation Foundation (WPF) uygulaması veya bir sınıfta bir yürütülebilir dosya gibi ayrı bir derleme veya dll kullanılan bir sınıf kitaplığı. Bu yaklaşım her belirli avantajları ve dezavantajları vardır.

  • Sınıf kitaplığı oluşturma gibi özel sınıflar birçok farklı olası uygulama paylaşılabilir üstünlüktür. Ayrı bir kütüphane de uygulamaların sürüm oluşturma sorunlarını denetim kolaylaştırır ve hedeflenen sınıf kullanım olduğu bir kök öğesi olarak üzerinde bir sınıf oluşturma basitleştirir bir XAML Sayfa.

  • Uygulamada özel sınıflar tanımlama bu teknik oldukça hafif ve dağıtım ve ana uygulamanın yürütülebilir ötesinde ayrı derlemeler tanıtmak karşılaşılan sınama sorunları en aza indiren üstünlüktür. Ancak, diğer kök öğe ile aynı derlemede tanımlı sınıflar kullanamazsınız önemli bir dezavantajı ise XAML sayfalarında bu uygulama.

  • Özel sınıflar aynı veya farklı bir derlemede tanımlanmış olsun, clr ad ve xml ad alanı arasında kullanılmak üzere eşlenmesi gereken XAML öğeleri. See WPF XAML İçin XAML Ad Uzayları ve Ad Uzayı Eşlemesi.

Özel sınıfın bir xaml öğesi olarak gereksinimleri

Nesne öğesi olarak oluşturulacak yapabilmek için sınıfınızın aşağıdaki gereksinimleri karşılaması gerekir:

  • Kendi özel sınıf, ortak ve varsayılan (parametresiz) ortak Oluşturucusu destekler. (Aşağıdaki yapıları ile ilgili Notlar bölümüne bakın.)

  • Özel sınıfınızın iç içe sınıfı olmamalıdır. Yuvalanmış sınıfları ve "nokta" kendi genel clr içinde kullanım sözdizimi engel diğer WPF ve/veya xaml özellikleri gibi eklenen özellikler.

Nesne öğesi sözdizimi etkinleştirmenin yanı sıra, nesne tanımınızı özelliği öğesi sözdizimi o nesnenin değeri türü olarak ele herhangi bir ortak özellikleri de sağlar. Nesne artık bir nesne öğesi olarak başlatılabilir ve böyle bir özelliğin özellik öğe değeri doldurmak için olmasıdır.

Structures

Özel türler her zaman içinde oluşturulması mümkün olduğu gibi tanımladığınız yapıları XAML , WPF .Çünkü CLR derleyiciler dolaylı olarak kendi varsayılanları tüm özellik değerlerini başlatır bir yapı için bir varsayılan kurucu oluşturmak Bazı durumlarda, varsayılan yapım ve/veya nesne öğesi kullanımı için bir yapı tercih değil. Bu yapı dolgu değerlerini ve işlevi için kavramsal olarak burada bulunan değerleri birbirini dışlayan yorumlamalar olabilir ve böylece özellikleri ayarlanabilir hiçbirine Birliği hazırlandığı için olabilir. A WPF böyle bir yapıyı örnektir GridLength. Genellikle, değerleri farklı yorumlamalar veya yapısı ayarlarını değerlerin modları oluşturmak dize kurallarını kullanarak özniteliği formunda belirtilebilir, bu tür yapıları türü dönüştürücü gerçekleştirmelisiniz. Yapısı da varsayılan olmayan bir oluşturucu aracılığıyla kodu Yapım için benzer davranışlar açığa.

Özel sınıf özellikler xaml nitelikleri için gereksinimler

Özellikleri tarafından değer türü (örneğin, bir temel) başvurusu veya bir sınıf türü için bir varsayılan kurucu veya bir xaml işlemci erişebileceği ayrılmış türü dönüştürücü kullanın. clr xaml uygulamasında, xaml işlemciler gibi dönüştürücüleri veya uygulamasının dil ilkel için yerel destek üzerinden ya da Bul TypeConverterAttribute türü veya yedekleme türü tanımlarının üye

Alternatif olarak, özelliği bir soyut sınıf türü veya arabirim başvuruda bulunabilir. Soyut sınıflar veya arabirimler, özellik değerini arabirimini uygulayan pratik sınıf örneklerini ya da soyut sınıf türetin türlerin örnekleri ile doldurulması gerekir xaml ayrıştırma görmesi içindir.

Özellikler, soyut bir sınıf bildirilebilir, ancak yalnızca soyut sınıf türetin pratik sınıflarda ayarlanabilir. Nesne sınıfı için hiç eleman sınıfında genel varsayılan bir oluşturucuya gerekmesidir.

Öznitelik sözdizimi TypeConverter etkin

Sınıf düzeyinde ayrılmış, attributed türü dönüştürücü sağlarsanız, uygulanan türü dönüştürme türü örneğini oluşturmak için gereksinim duyduğu herhangi bir özellik öznitelik sözdizimi sağlar. Bir tür dönüştürücü nesne öğesi türü kullanımını etkinleştirmez; yalnızca bir varsayılan kurucu türü varlığını nesne öğesi kullanımını etkinleştirir. Nesne öğesi sözdizimi türü de desteklemediği sürece bu nedenle türü dönüştürücü etkinleştirilmiş olan özellikler genel olarak söylemek gerekirse özellik sözdiziminde kullanılamaz. Bunun istisnası, özelliği öğesi sözdizimi belirtin, ama bir karakter dizesi özellik öğesinin sahip olmasıdır. Bu kullanım için bir öznitelik sözdizimi kullanımı gerçekten eşdeğerdir ve öznitelik değerinin daha sağlam boşluk işleme gerek olmadığı sürece bu tür bir kullanımı yaygın değildir. Örneğin, bir dizeyi bir özellik öðe kullanýmý ve özellik kullanımı karşılığı şudur:

<Button>Hallo!
  <Button.Language>
    de-DE
  </Button.Language>
</Button>
<Button Language="de-DE">Hallo!</Button>

Burada öznitelik sözdizimi izin verilir ancak üzerinden bir object öğesini içeren özellik öğesi sözdizimi verilmeyen özelliklerine örnek olarak XAML almak, çeşitli özellikleri, Cursor türü. Cursor Sınıfı ayrılmış türü dönüştürücü olan CursorConverter, varsayýlan kurucusu göstermiyor ama bu nedenle Cursor özelliği yalnızca ayarlanabilir öznitelik sözdizimi ile bile gerçek Cursor türü olan bir başvuru türü.

Her özellik türü dönüştürücüler

Alternatif olarak, özellik türü dönüştürücü özelliği düzeyinde bildirin. Bu bir "mini dil" sağlar başlattığı tür bir özellik satır içi nesneler için giriş olarak özniteliğinin gelen dize değerlerini işleyerek bir ConvertFrom işlem göre uygun bir türü. Bu bir kolaylık erişimcileri sağlamak için genellikle yapılır ve tek bir özelliği ayarlarken etkinleştirmek demektir değil gibi XAML. Ancak, ayrıca mevcut kullanmak istediğiniz öznitelikleri türü dönüştürücüleri kullanmak mümkündür CLR türleri, değil tedarik bir varsayılan kurucu ya da bir attributed türü dönüştürücü. ÖrneklerindenWPF  APIsyararlanan bazı özellikleri, CultureInfo türü. Bu durumda, WPF kullanılan varolan Microsoft .NET Framework CultureInfo daha iyi frameworks, daha önceki sürümlerinde kullanılmış olan uyumluluğu ve geçiş senaryoları adres türü ancak CultureInfo türü desteklemediği gerekli Kurucular veya türü düzey türü dönüştürme olarak kullanılabilir bir XAML özellik değeri doğrudan.

Olan bir özelliğe göstermek her bir XAML kullanımı, özellikle bir denetim yazarı iseniz, önemle dikkate bu özelliği ile yedekleme bir bağımlılık özelliği. Bu, varolan kullanırsanız, özellikle doğrudur Windows Presentation Foundation (WPF) uygulaması XAML işlemci kullanarak performansını artırmak için DependencyProperty yedekleme. Bağımlılık özelliği kullanıcılar için beklemeniz için gelecek, özellik için özellik sistemi özellikleri harekete geçirecek bir XAML özelliği erişilebilir. Bu animasyon, veri bağlama ve stil desteği gibi özellikleri içerir. For more information, see Özel Bağımlılık Özellikleri and XAML Yükleme ve Bağımlılık Özellikleri.

Yazı ve türü dönüştürücü öznitelik atanıyor

Bazen özel bir yazma gerekecek TypeConverter türetilmiş sınıf sağlamaya yönelik türü dönüştürme özelliği türü. Türetilmeli ve türü dönüştürücü oluşturma hakkında yönergeler destekleyebilir için XAML kullanımı ve uygulama TypeConverterAttributebakın TypeConverters ve XAML.

xaml olay işleyicisi öznitelik sözdizimi olaylarında özel sınıf için gereksinimler

Olarak kullanılabilir bir CLR olay, olay gerekir sergilenen bir varsayılan kurucu destekleyen bir sınıf üzerinde genel bir olay olarak veya bir soyut sınıf burada olay üzerinden erişilebilir türetilmiş sınıfları. Rahat olarak kullanılmak üzere bir olay yönlendirmeli, CLR olay uygulamak açık add ve remove eklemek ve kaldırmak için işleyiciler yöntemleri CLR olay imza ve bu işleyiciler iletmek AddHandler ve RemoveHandler yöntemleri. Bu yöntemler ekleyip işleyicileri olay bağlı olduğu örnek yönlendirilmiş olay işleyicisi deposuna.

NotNot

Kullanarak doğrudan yönlendirilmiş olayı işleyicilerini kaydetmesine olanak AddHandlerve kasıtlı değil tanımlamak için bir CLR sergiler olay olay yönlendirmeli.Olay değil sağlayacaktır Bu genellikle önerilmez çünkü XAML eklemek işleyicileri ve ortaya çıkan sınıfınızın öznitelik sözdizimi daha az saydam sunacaktır XAML görünümünü Bu türün yetenekleri.

Yazı koleksiyon özellikleri

Bir koleksiyon türü ele özelliklere sahip bir XAML sözdizimi nesneleri koleksiyonu eklenen belirtebilmenizi sağlar Bu sözdizimi, iki önemli özelliğe sahiptir.

  • Koleksiyon nesne nesne nesne öğesi sözdiziminde belirtilmesi gerekmez. Bir özelliğin belirtirken Bu koleksiyon türü varlığını dolaylı XAML , götüren bir koleksiyon türü.

  • Alt öğelerini biçimlendirme koleksiyonu özelliğinde koleksiyonun üyeleri haline gelmesi için işlenir. Normalde bir toplamanın üyeleri için kod erişim listesi/sözlük yöntemleri gibi gerçekleştirilen Add, ya da üzerinden bir dizinleyici. Ancak XAML sözdizimi desteği yöntemleri ya da dizinleyiciler. Koleksiyonlarıdır açıktır öğelerini bir ağaç oluşturmak için kullanılan yaygın bir gereksinim ve bu bildirime dayanan koleksiyonları doldurmak için herhangi bir şekilde gerek XAML. Bu nedenle, bir koleksiyon özelliğinin alt öğeler koleksiyonu özellik türü değeri derlemesine ekleyerek işlenir.

.net XAML uygulama ve böylece wpf xaml işlemci kullanan aşağıdaki tanımın ne oluşturan bir koleksiyon özelliği. Özelliğin özellik türü aşağıdakilerden birini uygulamalısınız:

clr, bu türlerin her biri olan bir Add tarafından kullanılan yöntem XAML İşlemci temel koleksiyonu oluştururken öğeleri eklemenesne grafiğini.

NotNot

Generic List ve Dictionary arabirimleri (IList<T> ve IDictionary<TKey, TValue>) koleksiyonu algılama tarafından desteklenmeyen WPF XAML İşlemci.Ancak kullanmak List<T> sınıf bir temel sınıf olarak çünkü bunu uygulayan IList , doğrudan veya Dictionary<TKey, TValue> temel bir sınıf olarak bunu uygulayan çünkü IDictionary doğrudan.

Bir özellik koleksiyonu alır bildirirken, bu özellik değeri türü yeni örneklerini nasıl başlatılır hakkında dikkatli olun. Özellik olarak uyguluyorsanız değil, bir bağımlılık özelliği, yeterli ise koleksiyon türü yapıcısını çağırır bir yedekleme alanı kullanmak özelliğine sahip. Sizin özelliği ise bir bağımlılık özelliği, koleksiyon özelliği varsayılan tür Oluşturucu bir parçası olarak başlatmak gerekebilir. Bu, çünkü bir bağımlılık özelliği sürer varsayılan değer meta verilere başvur ve statik, paylaşılan koleksiyon için bir koleksiyon özelliği başlangıç değeri genellikle istemiyorsanız. Bir toplama örneği içeren her tür örnek başına olması gerekir. For more information, see Özel Bağımlılık Özellikleri.

Özel koleksiyon türü koleksiyon özelliğini uygulayabilirsiniz. Kapalı toplama özellik düzeltme nedeniyle özel koleksiyon türü kullanılmak üzere bir varsayılan kurucu sağlamak gerekmez XAML örtülü. Ancak, isteğe bağlı olarak bir varsayılan kurucu için koleksiyon türü sağlayabilirsiniz. Bu düşünmek faydalı bir yöntem olabilir. Bir varsayılan kurucu sağlamazsanız, açıkça bir nesne öğe koleksiyonu bildirimini yapamazsınız. Bazı biçimlendirme yazarlar, bir biçimlendirme stili ilkesel açık koleksiyonu görmek tercih edebilirsiniz. Ayrıca, kendi koleksiyon türü bir özellik değeri kullanan yeni nesneler oluşturduğunuzda varsayılan bir oluşturucu başlatma gereksinimleri basitleştirebilirsiniz.

xaml içerik özelliklerini bildirmek

XAML Dil kavramını tanımlar bir XAML içerik özelliği. Tek bir nesne sözdiziminde kullanılabilir olan her bir sınıfı olabilir XAML içerik özelliği. Olarak bildirmenize XAML içerik özelliği kendi sınıfı için Uygula ContentPropertyAttribute bir parçası olarak sınıf tanımı. Tasarlanan adını belirtmek XAML özelliği olarak içerik Name özniteliği.

Bir toplama özelliğini belirleyebilirsiniz XAML içerik özelliği. Bu, bir object öğesini aradaki koleksiyonu nesne öğelerini veya özelliği öğe etiketleri olmadan bir veya daha çok alt öðe alınabildiği olabilir o özelliğin kullanımı olur. Bu öğeleri daha sonra değeri olarak kabul edilir XAML özelliği içerik ve eklenen yedekleme koleksiyon örneği.

Var olan bazı WPF XAML İçerik özellikleri, özellik türünü kullanmak Object. Böylece bir XAML ilkel alabileceği içerik özelliği değerleri gibi bir String yanı ayırdığınız bir tek başvuru nesne değeri. Bu model izlerseniz, olası türler işlenmesi yanı sıra türü belirleme türünüzü sorumludur. Tipik nedeni bir Object İçerik türüdür desteklemek için basit bir araç (aldığı bir varsayılan sunu işlemden) bir dize, nesne içerik ekleme veya varsayılan olmayan sunu veya belirtir nesnesi içerik ekleme, Gelişmiş bir anlamına gelirek veri.

xaml seri hale getirilmedi.

Eğer gibi belirli senaryolar denetim yazar, ayrıca, içinde oluşturulabileceği hiçbir nesne gösterimini sağlamak isteyebilirsiniz XAML de sıralanmış eşdeğer dön XAML. Seri hale getirme gereksinimlerini, bu konudaki açıklanmayan. See Denetim Yazımına Genel Bakış and Öğe Ağacı ve Serileştirme.

Ayrıca bkz.

Kavramlar

XAML'e Genel Bakış (WPF)

Özel Bağımlılık Özellikleri

Denetim Yazımına Genel Bakış

Temel Öğelere Genel Bakış

XAML Yükleme ve Bağımlılık Özellikleri