Aracılığıyla paylaş


Biçimlendirme Uzantıları ve WPF XAML

Bu konuda kendi sözdizimi kurallarına, amaç ve bunları underlies sınıf nesne modeli gibi xaml, işaretleme uzantıları kavramını tanıtır. Biçimlendirme uzantıları olan xaml dilini'nin ve genel bir özellik.xaml Hizmetleri net uygulaması. Bu konuda özellikle wpf xaml kullanmak için İşaretleme uzantıları ayrıntıları.

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

  • xaml işlemciler ve işaretleme uzantıları
  • Temel biçimlendirme uzantısı sözdizimi
  • xaml tanımlı biçimlendirme uzantıları
  • wpf özgü biçimlendirme uzantıları
  • * Uzantısı sınıflarını
  • Çıkış sıralarını ve işaretleme uzantıları
  • xaml Kullanımı uzantılarında işaretleme iç içe geçirme
  • Biçimlendirme uzantıları ve özellik öğesi sözdizimi
  • İlgili Konular

xaml işlemciler ve işaretleme uzantıları

Genel olarak söylemek gerekirse, xaml ayrıştırıcı ya da öznitelik değeri için bir temel dönüştürülebilir ya da bazı araçlar tarafından bir nesneye dönüştürme hazır bilgi dizesi olarak yorumlayabilir. Bir tür türü dönüştürücü başvurarak yöntemidir; Bu konudaki belgelenen TypeConverters ve XAML. Ancak, farklı davranış gerekli olduğu senaryolar vardır. Örneğin, bir öznitelik değeri nesne grafiği nesnesi yeni bir neden değil, xaml işlemci sağlanabilir. Bunun yerine, öznitelik zaten oluşturulmuş bir nesneye başka bir grafik kısmında veya statik bir nesneye bir başvuru yapan bir nesne grafiği neden. Başka bir xaml işlemci nesnesinin yapıcısına varsayılan olmayan bağımsız değişkenleri sağlar sözdizimini kullanmak için sağlanabilir senaryodur. Burada bir biçimlendirme uzantısı çözüm sağlayabilir senaryo türlerini bunlar.

Temel biçimlendirme uzantısı sözdizimi

Biçimlendirme uzantısı, bir öznitelik kullanım özellikleri, özellik öðe kullanýmý veya her ikisini birden özellikleri için değerleri sağlamak için uygulanabilir.

Bir öznitelik değeri sağlamak için kullanıldığında, bir biçimlendirme uzantısı sırası bir xaml işlemciye ayıran açma ve kapatma küme ayraçlarını varlığını sözdizimidir ({ve}). Biçimlendirme uzantısı türünü sonra açýlýþ küme parantezine hemen dize simgesi tanımlanır.

Özellik öğesi sözdiziminde kullanıldığında, işaretleme uzantısı görsel olarak bir özellik öğesinin değeri sağlamak için kullanılan herhangi bir öğe aynıdır: köşeli parantez içinde (<>) içine alınmış bir öğe biçimlendirme uzantısı sınıfına başvuran bir xaml öğe bildirimi.

xaml tanımlı biçimlendirme uzantıları

Çeşitli biçimlendirme uzantıları xaml wpf uygulamasına özgü değildir, ancak bunun yerine intrinsics uygulamalarında veya özellikler XAML bir dil olarak mevcut. Bu işaretleme uzantıları System.Xaml derlemesindeki genel bir parçası olarak uygulanır.net Framework xaml Hizmetleri ve xaml dili xaml ad şunlardır. Ortak markup kullanımı açısından bu işaretleme Uzantıları tarafından tanımlanabilen genellikle x: önek kullanımı. MarkupExtension (Ayrıca içinde tanımlanan System.Xaml) temel sınıfı, tüm biçimlendirme uzantıları için xaml okuyucular ve xaml yazarlar, dahil bulundurulmalıdır kullanması gereken desen sağlarwpf xaml.

  • x:Typekaynakları Type nesne için adlandırılmış bir türü. Bu tesis, stilleri ve şablonlar en sık kullanılır. For details, see x: tür biçimlendirme uzantı.

  • x:Staticstatik değerler üretir. Değerleri doğrudan hedef özelliğin değeri türü olmayan değer türü kodu varlıklarda gelir, ancak bu tür değerlendirilebilir. For details, see x: statik biçimlendirme uzantı.

  • x:Nullbelirtir null bir özellik için bir değer olarak ve ilgili öznitelikleri veya özelliği öğe değerlerinin. kullanılabilir For details, see x: null biçimlendirme uzantı.

  • x:Arrayxaml sözdiziminde, burada koleksiyonu destek wpf temel öğeleri tarafından sağlanan ve denetim modelleri kasıtlı değil kullanılan durumlarda genel diziler oluşturma desteği sağlar. For details, see x: dizi biçimlendirme uzantı.

NotNot

x: Öneki xaml dilini intrinsics, xaml dosya veya kök öğesinde normal xaml ad eşleme için kullanılırüretim.Örneğin, Visual Studio wpf uygulamaları için şablonları kullanarak bu xaml dosyası başlatmak x: eşleme.Kendi xaml ad eşleme farklı önek belirteci seçebilir, ancak bu belge varsayılan varsayacağız x: eşlemesini tanımlama bu varlıkları olmayan karşıt olarak wpf varsayılan ad alanını veya başka xaml ad xaml dili xaml ad alanı tanımlı bir parçası olarak ilgili belirli bir framework.

wpf özgü biçimlendirme uzantıları

wpf programlamada kullanılan en yaygın biçimlendirme uzantıları kaynak başvurular destek dosyaları (StaticResource ve DynamicResource) ve veri bağlama işlemini desteklemektedirler (Binding).

  • StaticResourcebir değeri, önceden tanımlanmış bir kaynak değeri getirilmesiyle özelliğini sağlar. A StaticResource değerlendirme xaml yük zaman Sonuçta yapılan ve nesne grafiği için çalışma zamanında erişimi yok. Ayrıntılı bilgi için bkz: StaticResource Biçimleme Uzantısı.

  • DynamicResourcebir değer, bir kaynağın çalışma zamanı başvuru bu değerin erteleyerek özelliğini sağlar. Dinamik kaynağın başvuru böyle bir kaynak erişilir ve zamanında nesne grafiğini erişimi olan her zaman yeni bir arama zorlar. Bu erişim almak için DynamicResource kavram wpf özelliği sisteminde bağımlılık özellikleri tarafından desteklenmektedir ve değerlendirilen ifadeler. Bu nedenle, yalnızca kullanabileceğiniz DynamicResource için bir bağımlılık özelliği hedef. For details, see DynamicResource Biçimlendirme Uzantısı.

  • Bindingçalışma zamanında üst nesneye uygulanan veri içeriği kullanarak bir özellik için değer veri bağlı sağlar. Veri bağlama belirtmek için önemli satır içi sözdizimi sağladığından bu biçimlendirme nispeten daha karmaşık uzantısıdır. For details, see Biçimlendirme Uzantısı Bağlama.

  • RelativeSourcekaynak bilgileri sağlayan bir Binding birkaç olası ilişkilerde gezinmekçalışma zamanı Nesne Ağacı. Bu, çok amaçlı şablonlarında oluşturulan veya çevresindeki nesne ağacının tam bilginiz kodda oluşturulan bağlamaları için özelleştirilmiş Hizmeti'nden sağlar. For details, see RelativeSource MarkupExtension.

  • TemplateBindingşablonun kullanacağı sınıf nesne modeli-tanımlı özelliklerinden gelen şablonu esas alan özellikleri değerleri için bir denetim şablon sağlar. Başka bir deyişle, şablon tanımda özelliği şablon uygulandıktan sonra yalnızca var olan bir içeriği erişebilir. For details, see TemplateBinding Biçimlendirme Uzantısı. Pratik kullanımı ile ilgili daha fazla bilgi için TemplateBindingbakın stil ekleme ile ControlTemplates örnek.

  • ColorConvertedBitmapgöreceli olarak Gelişmiş bir görüntü senaryoyu destekler. For details, see ColorConvertedBitmap Biçimlendirme Uzantısı.

  • ComponentResourceKeyve ThemeDictionary Destek kaynakları ve Temalar özel denetimleri ile paketlenmiş için özellikle kaynak arama yönleri Daha fazla bilgi için bkz: ComponentResourceKey Biçimlendirme Uzantısı, ThemeDictionary Biçimlendirme Uzantısı, veya Denetim Yazımına Genel Bakış.

* Uzantısı sınıflarını

Hem genel xaml dilini ve wpf özgü biçimlendirme uzantıları için her biçimlendirme uzantısı davranışını bir xaml işlemciye tanımlanan bir *Extension , türetir sınıfı MarkupExtensionve uygulaması sağlar ProvideValue yöntemi. Bu yöntem her uzantı üzerinde işaretleme uzantısı değerlendirildiğinde, döndürülen nesne sağlar. Döndürülen nesne genellikle biçimlendirme uzantısı geçirilen çeşitli dize belirteçleri göre değerlendirilir.

Örneğin, StaticResourceExtension sınıfı, gerçek kaynak arama yüzey uygulaması sağlar böylece kendi ProvideValue uygulaması giriş kaynak aramak için kullanılan bir dize olan o belirli uygulama ile istenen nesneyi döndürür, x:Key. Bu uygulama ayrıntı çoğunu varolan biçimlendirme uzantı kullanıyorsanız, önemli değildir.

Bazı biçimlendirme extensions dize belirteci bağımsız kullanmayın. Bu statik ya da tutarlı bir değeri döndürmeleri veya içerik için hangi değerin verilmesi gereken geçtiğini hizmetlerden biri üzerinden kullanılabilir olduğundan, serviceProvider parametresi.

*Extension Desen adlandırma olduğu ve tutarlılık. Sırada o sınıf için bir biçimlendirme uzantısı desteği tanımlamak xaml işlemci için gerekli değildir. Sizin codebase System.Xaml içerir ve kullandığı sürece.Tüm xaml işaretleme uzantısı türetilmeli olarak tanınması gerekli olan net Framework xaml Hizmetleri uygulamaları, MarkupExtension ve destekleyecek bir yapım sözdizimi. wpf tanımlar değil izleyin işaretleme uzantısı etkinleştirme sınıfları *Extension adlandırma düzeni, örneğin Binding. Genellikle bu sınıfın ötesinde saf işaretleme uzantısı desteği senaryoları destekler nedenidir. Durumunda, Binding, sınıf yöntemleri ve senaryoları xaml ile yapmak için bir şey olması için nesnenin özelliklerini çalıştırma erişimi destekleyen

Uzantı sınıfı yorumunu başlatma metin

Biçimlendirme uzantı adı ve hala kaşlı ayraçlar içinde aşağıdaki dize belirteçleri xaml işlemcisi tarafından aşağıdaki yollardan biriyle yorumlanır:

  • Virgül her zaman ayırıcı veya tek tek belirteçleri ayırıcı temsil eder.

  • Ayrı ayrı belirteçleri herhangi eşittir işaretleri içermiyorsa, her simgenin oluşturucu bağımsız değişkeni olarak kabul edilir. Her Yapıcı parametre olarak o imzayı ve o imzayı tarafından beklenen doğru sırada beklenen türde verilmelidir.

    NotNot

    xaml işlemci eşleşen çiftleri sayısını bağımsız değişken sayısı kurucusunu çağırmalıdır.Özel biçimlendirme uzantısı uyguluyorsanız, bu nedenle, birden çok parametre ile aynı bağımsız değişken sayısı sağlamaz.Birden çok biçimlendirme uzantısı yapıcı yolu aynı parametre sayısı olan varsa bir xaml işlemci nasıl davranacağını davranışını tanımlı değil, ancak xaml işlemci varsa bu durum işaretleme uzantısı türü tanımlarının kullanımıyla ilgili istisna izin verilmeden öngörmesi.

  • Tek tek ayrılmış eşittir işaretleri belirteçleri içeren, sonra bir xaml işlemci biçimlendirme uzantısı için önce varsayılan yapıcısını çağırır. Daha sonra her ad = değer çifti, işaretleme uzantısı ve bu özelliğe atanacak değeri bulunan bir özellik adı olarak yorumlanır.

  • Yapıcı davranış ve davranış işaretleme uzantısında özelliğini arasında paralel bir sonuç ise, kullandığınız hangi davranış önemli değildir. Kullanmak daha yaygın kullanımı olan özelliği=değeri birden fazla ayarlanabilir özelliği yalnızca, yapıcı parametreleri yanlışlıkla devriğini almak daha düşüktür ve yaptığınız biçimlendirme daha bilerek kolaylaştırır çünkü varsa işaretleme uzantıları çifti. (Ne zaman belirttiğiniz özellik = değer çifti, bu özelliklerin herhangi bir sırada olabilir.) Ayrıca, işaretleme uzantısı her biri ayarlanabilir özellikleri ayarlayan Yapıcı parametre sağlar hiçbir garantisi yoktur. Örneğin, Binding uzantısında aracılığıyla ayarlanabilir birçok özelliklere sahip bir biçimlendirme uzantısı olan özelliği=değeri formu, ancak Binding yalnızca iki oluşturucular destekler: bir varsayılan kurucu ve ilk bir yol ayarlar biri.

  • Harflerden oluşan virgül escapement olmadan işaretleme uzantısı geçirilemez.

Çıkış sıralarını ve işaretleme uzantıları

Öznitelik bir xaml işlemcide işleme kuþak imleri işaretleme uzantısı sırasının bir gösterge olarak kullanır. Bir hazýr bilgi kaşlı ayraç karakteri öznitelik değeri gerekirse, düz kaşlı ayraç tarafından izlenen bir boş kaşlı ayraç çiftini kullanarak çıkış sırasını girerek üretmek olanaklı değildir. See {} Çıkış dizi / Biçimlendirme uzantı.

xaml Kullanımı uzantılarında işaretleme iç içe geçirme

Birden çok biçimlendirme uzantıları iç içe geçmiş desteklenir ve her biçimlendirme uzantısı Acınızı ilk önce değerlendirilecek. Örneğin, aşağıdaki kullanım göz önünde bulundurun:

  <Setter Property="Background"
    Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />

Bu kullanım, x:Static deyimi önce hesaplanýr ve döndürür dize. Dize bağımsız değişkeni olarak sonra kullanılır DynamicResource.

Biçimlendirme uzantıları ve özellik öğesi sözdizimi

Bir özellik öğesinin değeri dolduran bir nesne öğesi olarak kullanıldığında, işaretleme uzantısı görsel olarak xaml içinde kullanılabilecek bir tipik türü destekli object öğesini ayırt edilemeyen sınıfıdır. Pratik arasında fark tipik object öğesini ve işaretleme uzantısı işaretleme uzantısı yazılı bir değere değerlendirilen veya bir ifade olarak ertelenmiş olduğunu vardır. Bu nedenle mekanizmaları özellik değerleri biçimlendirme uzantısı için olası türü hatalar için farklı, diğer programlama modeller Geç Baðlanmýþ özelliği nasıl işleneceğini benzer olacaktır. Sıradan nesne öğesi türü eşleştirme karşı xaml ayrıştırıldığında ayarlama target özelliği için değerlendirilecek.

Nesne öğesi sözdiziminde bir özellik öğesini doldurmak için kullanıldığında çoğu biçimlendirme uzantıları içerik veya herhangi bir başka özelliği öğesi sözdizimi içinde yer almaz. Böylece nesne öğesi etiketini kapatın ve hiçbir alt öğeleri sunarlar. Herhangi bir nesne öğe bir xaml işlemci tarafından karşılaşılan her o sınıf için bir yapıcı çağrılır, böylece hangi ayrıştırılmış öğesinden oluşturulan nesnesini başlatır. Biçimlendirme uzantısı sınıfını Hayır farklıdır: Nesne öğesi sözdiziminde kullanılabilir biçimlendirme Dahili numaranız istiyorsanız, bir varsayılan kurucu sağlamanız gerekir. Varolan biçimlendirme uzantılar etkili başlatma için belirtilen en az gerekli özelliği değerine sahip. Öyle ise, bu özellik değeri genellikle nesnesi öğesinde bir özellik özniteliği verilir. İçinde XAML isim uzayı (x:) Dil özellikleri ve WPF XAML Ekleri başvuru sayfaları, biçimlendirme gerekli özellikleri (ve gerekli özellik adlarını) uzantıları Not. Başvuru sayfaları, nesne öğesi sözdizimi veya öznitelik sözdizimi için belirli biçimlendirme uzantıları izin verilmeyen, Not. Önemli bir durum x: dizi biçimlendirme uzantı, hangi olamaz desteği öznitelik sözdizimi çünkü bu diziyi içeriğini belirtilen, içinde etiketleme olarak içerik. Dizi içeriği genel nesneler olarak işlenir, bu nedenle hiçbir varsayılan türü Dönüştürücü'özniteliği için uygulanabilirdir. Ayrıca, x: dizi biçimlendirme uzantı gerektiren bir type parametresi.

Ayrıca bkz.

Başvuru

StaticResource Biçimleme Uzantısı

Biçimlendirme Uzantısı Bağlama

DynamicResource Biçimlendirme Uzantısı

x: tür biçimlendirme uzantı

Kavramlar

XAML'e Genel Bakış (WPF)

Diğer Kaynaklar

XAML isim uzayı (x:) Dil özellikleri

WPF XAML Ekleri