Aracılığıyla paylaş


Ayrıntılı XAML Sözdizimi

Bu konuda xaml sözdizimi öğeleri açıklamak için kullanılan terimler tanımlar. Bu terimler sıklıkla bu belge, hem de wpf belgeleri geri kalanı boyunca özellikle ve xaml veya System.Xaml düzeyinde xaml dil desteği etkin temel xaml kavramlarını kullanan diğer çerçeveleri için kullanılır. Bu konuda'nda sunulan temel terimler üzerinde genişletir XAML'e Genel Bakış (WPF).

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

  • xaml dil belirtimi
  • XAML and CLR
  • Object Element Syntax
  • Nesne öğelerinin özellikleri
  • Öznitelik sözdizimi (özellikleri)
  • Özellik öğesi sözdizimi
  • Koleksiyonu sözdizimi
  • xaml içerik özellikleri
  • İçerik özellikleri ve birleştirilmiş koleksiyonu sözdizimi
  • XAML Namespaces
  • Biçimlendirme uzantıları
  • Attached Properties
  • Attached Events
  • xaml kök öğesinin anatomisi
  • xaml kullanımı isteğe bağlıdır ve Nonrecommended
  • İlgili Konular

xaml dil belirtimi

Burada tanımlanan xaml sözdizimi terimler de tanımlanan veya xaml dil belirtimi içinde başvurulan. xaml xml tabanlı bir dildir ve izleyen veya xml yapısal kuralları genişletir. Bazı terimler paylaşılan klasörden veya xml dili veya xml belge nesnesi modeli tanıtırken kullanılan terimler üzerinde temel alır.

xaml dil belirtimi hakkında daha fazla bilgi için karşıdan yükleme [ms-xaml] Microsoft Yükleme Merkezi'nden.

XAML and CLR

xaml bir biçimlendirme dilidir. common language runtime (CLR), Kendi adıyla örtük olarak sağlayan çalışma zamanı yürütme. xaml kendine doğrudan clr çalışma zamanı tarafından tüketilen yaygın dillerden biri değil. Bunun yerine, xaml kendi tür sistemini destekleyici olarak düşünebilirsiniz. wpf tarafından kullanılan belirli xaml ayrıştırma sistemi clr ve clr türü sistem üzerinde kurulmuştur. wpf için xaml ayrıştırıldığında zamanında temsili örneğini oluşturmak için clr türleri xaml türlerine eşlenir. xaml dil belirtimi eşdeğer sözdizimini tartışmalar yapmak olsa bile bu nedenle sözdizimi bu belgeye tartışma geri kalanı clr türü sistem başvurular içerir. (xaml dil belirtimi düzeyi xaml türleri hangi clr olması gerekmez, ancak oluşturma ve farklı bir xaml çözümleyici kullanımını gerektirecek herhangi başka tür sistemi için eşleştirilebilir.)

Üyeleri türleri ve sınıf mirası

Özellikler ve xaml üye olarak görünen olaylar olarak bir WPF türü genellikle temel türler miras Örneğin, bu örneði ele alalým: <Button Background="Blue" .../>. Background Özelliği değil hemen bildirilen bir özellik üzerinde Button sınıfı, sınıf tanımının, yansıtma sonuçları veya aranacak olanbelgeleri. Bunun yerine, Background Bankası ' ndan devralınan Control sınıfa

Sınıf mirası davranışını WPF xaml öğeleri olan önemli bir Kalkış gelen bir şema tarafından zorlanan yorumunu xml biçimlendirme. Sınıf mirası Ara temel sınıflar özellikle soyut veya arabirimleri dahil karmaşık hale gelebilir. Bu genellikle kullanılan xaml öğeleri ve bunların bulunmadığı öznitelikler kümesi doğru olarak ve tamamen şema türleri kullanarak temsil etmek zor olan bir nedeni, XML programlama, gibi dtd veya xsd biçimi. Bir diğer nedeni ise, genişletilebilirlik ve xaml dilini türü eşleme özelliklerinin bulunmadığı türleri ve üyeler herhangi sabit gösterimi tam preclude.

Object Element Syntax

Nesne öğesi sözdizimi bir xml öğesi bildirerek bir clr sınıf veya yapı başlattığı xaml işaretleme sözdizimidir. Bu sözdizimi, html gibi diğer biçimlendirme dillerini öğesi sözdizimi benzer. Nesne öğesi sözdizimi, sınıf veya yapı oluşturulmasını türü adı hemen sonra bir sol açılı ayraç (<) ile başlar. Sıfır veya daha fazla boşluk türü adı izleyebilir ve sıfır veya daha fazla öznitelik de bildirilen nesnesi öğesinde bir veya daha fazla boşlukla ayırarak her öznitelik adý = "değer" çifti. Son olarak, aşağıdakilerden biri doğru olması gerekir:

  • Öğe ve etiket sağ açılı ayraç (>) tarafından hemen ardından eğik çizgi (/) tarafından kapatılması gerekir.

  • Açýlýþ etiketini sağ açılı ayraç (>) tarafından tamamlanması gerekir. Diğer nesne öğelerini, özellik öğelerinin veya iç metin açýlýþ etiketini izleyebilirsiniz. Tam olarak hangi içeriği burada alabilecek öğesinin nesne modeli tarafından genellikle sınırlıdır. Kapanış etiketi nesnesi öğesinin eşdeğeri de, uygun iç içe geçme olarak varolmalı ve diğer açılış ve kapanış etiketi çiftiyle dengelemek.

xaml tarafından uygulandığı gibi.net bir nesne öğeleri türlerine, özellikleri veya olayları ve xaml ad clr ad alanları artı birleştirme alanlarına öznitelikler eşleme kuralları vardır. wpf için ve.net Framework, xaml nesne öğeleri eşlemek için Microsoft .NET türleri olarak tanımlanmış Başvurulan derlemeler ve öznitelikler eşleme üyelerine bu türleri. xaml clr yazıyla başvuru yaptığınızda, devralınan üyeleri de bu tür erişebilirsiniz.

Örneğin, aşağıdaki örnek, yeni bir örneğini başlatır nesne öğesi sözdizimidir Button sınıf ve ayrıca belirtir bir Name öznitelik ve ilgili özniteliği için bir değer:

<Button Name="CheckoutButton"/>

Aşağıdaki örnek de xaml içerik özelliği sözdizimi içeren nesne öğesi sözdizimidir. İçinde bulunan iç metin ayarlamak için kullanılan TextBox xaml içerik özelliği, Text.

<TextBox>This is a Text Box</TextBox>

İçerik modelleri

Bir sınıf bir kullanım sözdizimi açısından bir xaml nesne öğesi olarak desteklemiyor olabilir, ancak Genel İçerik modeli veya öğe ağacı beklenen bir konumda yerleştirildiğinde, öğe yalnızca bir uygulama ya da sayfa düzgün. Örneğin, bir MenuItem genellikle yalnızca bir alt öğesi yerleştirilmesi gereken bir MenuBase türetilmiş sınıf gibi Menu. İçerik modelleri belirli öğeler için açıklamalar ve diğer denetimler için sınıf sayfalarında bir parçası olarak belgelenen WPF sınıfları olarak kullanılabilirxaml öğeleri.

Nesne öğelerinin özellikleri

xaml özelliklerinde olası sözdizimleri çeşitli tarafından ayarlanır. Belirli bir özellik için hangi sözdizimi kullanılabilir, ayarlamakta olduğunuz özelliğin temel türü sistem özelliklerine göre değişir.

Zamanında nesne grafiğinde varken özelliklerin değerlerini ayarlayarak, özelliği veya özellikleri nesneleri ekleyin. Bir object öğesini oluşturulan nesneyi ilk durumunun varsayılan kurucu davranış dayanır. Genellikle uygulamanız tümüyle varsayılan örnek bir nesnenin dışında kullanır.

Öznitelik sözdizimi (özellikleri)

Öznitelik sözdizimi varolan bir nesnesi öğesinde öznitelik bildirerek bir özellik için bir değer ayarlar xaml işaretleme sözdizimi aşağıdaki gibidir. Öznitelik adı ilgili object öğesini yedekler sınıfının özelliğini clr üye adı eşleşmelidir. Öznitelik adı atama işleci (=) izledi. Öznitelik değeri tırnak içine alarak bir dize olmalıdır.

NotNot

Alternatif teklifler, değişmez tırnak işareti içindeki bir öznitelik için kullanabilirsiniz.Örneğin, içinde çift tırnak karakteri içeren bir dize bildirmek için bir araç olarak tek tırnak işaretleri kullanabilirsiniz.Tek veya çift tırnak işaretleri kullanmak ister, eşleşen bir çiftin ve öznitelik değeri dizesi için kullanmanız gerekir.Vardır da kaçış sıraları veya diğer tekniklerle belirli bir xaml sözdizimi tarafından uygulanan karakter kısıtlamalar etrafında çalışmak.See XML karakter varlıkları ve XAML.

Öznitelik sözdizimi ayarlanması için bir özellik public olmalıdır ve yazılabilir olması gerekir. Yedekleme türü sisteminde özelliğinin değeri bir değer türü olmalıdır veya örneği veya ilgili erişirken bir xaml işlemci tarafından başvurulan bir başvuru türü türü yedekleme gerekir.

wpf xaml olaylar için öznitelik adı başvurulan olay ortak ve ortak bir temsilci olması gerekir.

Özellik veya olay sınıfı veya içeren nesne öğesi tarafından örneği oluşturulan yapı üyesi olması gerekir.

Öznitelik değerleri işleme

Açılış ve kapanış tırnak işaretleri içinde yer alan dize değeri bir xaml işlemci tarafından işlenir. Özellikler için varsayılan davranışı işleme temel clr özelliğine türüne göre belirlenir.

Öznitelik değeri aşağıdakilerden biri girilir bu işlem sırasını kullanarak:

  1. Kaşlı ayraç ya da türetildiği bir object öğesini xaml işlemci karşılaşırsa, MarkupExtension, sonra başvurulan işaretleme uzantısı önce hesaplanýr değeri bir dize olarak işleme yerine ve işaretleme uzantısı tarafından döndürülen nesne kullanılan değer. Çoğu durumda bir biçimlendirme uzantısı tarafından döndürülen nesne varolan bir nesne ya da bir ifade olan defers çalışma süresi kadar değerlendirme ve yeni oluşturulmuş bir nesne değil başvuru olacaktır.

  2. Özellik bildirilirse bir attributed ile TypeConverter, veya bu özellik değeri türü olarak bildirilmiş bir attributed ile TypeConverter, bir dönüştürme giriş türü dönüştürücü özniteliğinin dize değeri gönderilen ve dönüştürücü döndürür bir yeni nesne örneği.

  3. Yoksa hiç TypeConverter, doğrudan bir özellik türü dönüştürme çalıştı. Ayrıştırıcı yerel değeri xaml dilini temel türlerin veya onay (ayrıştırıcı eşleşen değerler sonra erişir) bir numaralandırma adlandırılmış sabitler adlarının arasında doğrudan bir dönüşümü bu son düzeyidir.

Numaralandırma öznitelik değerleri

xaml dahil NTFS'nin xaml çözümleyicileri tarafından işlenir ve numaralandırmanın adlandırılmış sabitlerinden biri dize adını belirterek bir numaralandırma üyeleri belirtilmelidir.

Nonflag numaralandırma değerleri için doğal bir öznitelik deðerinin dize işleme ve numaralandırma değerlerden birini çözmek için davranıştır. Numaralandırma biçimi belirtmezseniz Numaralandırma.Değeri, kodda olduğu gibi. Bunun yerine, yalnızca belirttiğiniz değeri, ve Numaralandırma türü ayarlama özelliği tarafından algılanır. Öznitelik belirtirseniz Numaralandırma.Değeri formunu değil çözmek doğru.

Flagwise numaralandırma için davranışı esas Enum.Parse yöntemi. Her değeri virgülle ayırarak flagwise numaralandırma için birden çok değer belirtebilirsiniz. Ancak, flagwise olmayan numaralandırma değerleri birleştiremezsiniz. Örneğin, oluşturmaya için virgül sözdizimini kullanamazsınız bir Trigger nonflag numaralandırmanın birden çok koşula davranır:

<!--This will not compile, because Visibility is not a flagwise enumeration.-->
...
<Trigger Property="Visibility" Value="Collapsed,Hidden">
  <Setter ... />
</Trigger>
...

xaml ayarlanabilir öznitelikleri flagwise numaralandırma wpf seyrek kullanılır. Ancak, bir tür numaralandırmadır StyleSimulations. Açıklamalar için sağlanan örnek değiştirmek için virgülle ayrılmış flagwise öznitelik sözdizimi kullanın örneğin Glyphs sınıfı; StyleSimulations = "BoldSimulation"duyuluyordu StyleSimulations = "BoldSimulation,ItalicSimulation". KeyBinding.Modifiersbaşka bir yerde birden fazla numaralandırma değeri belirtilen özelliğidir. Ancak, bu özelliği özel bir durum olması nedeniyle olacağını ModifierKeys Numaralandırma destekler kendi türü dönüştürücü. Değiştiriciler türü dönüştürücü, ayırıcı virgül (,) yerine bir artı işareti (+) kullanır. Bu dönüştürme "ctrl + Alt" gibi Microsoft Windows programlama tuş bileşimlerindeki göstermek için daha geleneksel sözdizimini destekler.

Özellikler ve olay üye adı başvuruları

Bir öznitelik belirtirken, herhangi bir özelliği veya clr türü içeren nesne öğesinin örneği üyesi olarak bulunan olay başvuruda bulunabilir.

Veya ekli bir özelliğe başvurabilirsiniz veya olay, içeren nesne öğesi bağımsız bağlı. (Eklenen özellikler, yaklaşan bir bölümünde anlatılacaktır.)

Ayrıca herhangi bir olaydan kullanarak varsayılan ad alanı erişilebilen herhangi bir nesne adı bir typeName.olay kısmen tam adı; Bu sözdizimi için düğmelere işleyicilerini destekler yönlendirilen olayları burada işleyicisi gelen alt öğeleri yönlendirme olaylarını işlemek için tasarlanmıştır, ancak üst öğesi kendi üyeler tablosunda o olay da yok. Bu sözdizimi bağlanmış olay sözdizimi benzer, ancak burada olayı doğru bağlanmış bir olay değil. Bunun yerine, olay nitelenmiþ bir ad ile başvurduğunuz. For more information, see Yönlendirilmiş Olaylara Genel Bakış.

Bazı senaryolarda, özellik adları bazen öznitelik adı yerine, bir öznitelik değeri olarak sağlanır. Bu özellik adı da formunda belirtilen özelliği gibi niteleyicileri içerebilir ownerType.dependencyPropertyName. Bu senaryo, stiller veya şablonları xaml yazarken yaygındır. Bir özniteliği değeri olarak sağlanan özellik adları için işleme kuralları farklıdır ve ayarlanan özelliğin türünü veya davranışları belirli wpf alt sistemlerin tarafından yönetilir. For details, see Stillendirme ve Şablon Oluşturma.

Bir öznitelik değeri bir özellik özellik ilişkiyi açıklayan başka bir kullanım için özellik adları olur. Bu özellik, film şeridi hedefleri ve veri bağlama için kullanılan ve etkindir PropertyPath sınıf ve kendi türü dönüştürücü. Arama mantığı daha eksiksiz bir açıklaması için bkz: PropertyPath XAML sözdizimi.

Özellik öğesi sözdizimi

Özellik öğesi sözdizimi biraz öğeleri için temel xml sözdizimi kurallarına karşı diverges bir sözdizimi aşağıdaki gibidir. xml, bir öznitelik değeri de facto bir dizedir, yalnızca olası bir değişim ile hangi dize kodlama biçimi kullanılan ediliyor. xaml diğer nesne öðelerin bir özelliğin değerini atayabilirsiniz. Bu özelliği, özellik öğesi sözdizimi tarafından etkinleştirilir. Açılış öğesini kullanarak özellik belirtilen öğe etiketi içinde bir öznitelik olarak belirtilen özelliği yerine, etiket elementTypeName.propertyName form içinde belirtilen değer özelliğin ve özellik öğesini sonra kapatılır.

Özellikle, sözdizimi sınıf veya özellik öğesi sözdizimi içinde bulunan yapı türünün adı hemen arkasından bir sol açılı ayraç (<) başlar. Bu hemen tek nokta (.) sonra bir özelliğin adı sonra sağ açılı ayraç (>) tarafından izlenir. Öznitelik sözdizimini gibi o özelliğin belirtilen türde ortak bildirilen üyeler içinde bulunması gerekir. Özelliğe atanacak değeri özelliği öğesi içinde yer alıyor. Genellikle, değer olarak bir veya daha fazla nesne öğeleri verilir, senaryo olduğu nesneler değerleri belirtmek için bu özelliği öğesi sözdizimi adresine amaçlanmıştır. Son olarak, aynı belirterek bir eşdeğer kapanış etiketi elementTypeName.propertyName birlikte sağlanmalıdır, uygun iç içe geçme ve diğer öğe etiketleri ile bakiye.

Örneğin, aşağıdaki özellik öğesi sözdizimidir ContextMenu özelliği, bir Button.

<Button>
  <Button.ContextMenu>
    <ContextMenu>
      <MenuItem Header="1">First item</MenuItem>
      <MenuItem Header="2">Second item</MenuItem>
    </ContextMenu>
  </Button.ContextMenu>
  Right-click me!</Button>

Özellik öğesinde değeri de bulunularak belirtilen özellik türü, bir temel değer türü olduğu durumlarda iç metin gibi verilebilir String, ya da bir numaralandırma bir adı burada belirtilir. Bu iki kullanımları biraz seyrek olduklarından bu durumların her birinde daha basit bir öznitelik sözdizimini de kullanabilirsiniz. xaml içerik özelliği olmayan ancak yine de UI metin gösterimi için kullanılan özellikler özellik öğesi bir dizeyle doldurmak için bir senaryo içindir ve bu UI metni görünmesini güçlüklerinden gibi belirli boşluk öğeleri gerekir. Öznitelik sözdizimi güçlüklerinden korumak, ancak özellik öğesi sözdizimi için önemli boşluk koruma etkin olduğu sürece (ayrıntılı bilgi için bkz: XAML işlem boşluk). Başka bir senaryo böylece x: Uid yönergesi özelliği öğeye uygulanabilir ve böylece, içindeki değer, yerelleştirilmiş olmalıdır wpf çıktı baml veya değer olarak işaretlediğer teknikleri.

wpf mantıksal ağaç özelliği öğesi temsil edilmez. Özelliği öğenin bir özelliğini ayarlamak için yalnızca belirli bir sözdizimi olan ve bir örneği veya nesnenin kendisine destek olan bir öğe değil. (Mantıksal ağaç kavramı hakkında daha fazla bilgi için bkz: WPF içinde ağaçlar.)

İnceliklerini boşluk işleme gibi biraz sözdizimleri arasında değişse de burada öznitelik ve özellik öğesi sözdizimi desteklenir özelliklerini iki sözdizimleri aynı sonucu genelde olması.

Koleksiyonu sözdizimi

xaml belirtimi değer türü bir topluluk olduğu özelliklerini tanımlamak için xaml işlemci uygulamaları gerektirir. Genel xaml işlemci uygulamasında.Yönetilen kod ve clr net dayanır ve koleksiyon türleri aracılığıyla aşağıdakilerden birini tanımlar:

Bir özelliğin türünü koleksiyonu ise, sonra inferred koleksiyon türü işaretleme bir object öğesini olarak belirtilmesi gerekmez. Bunun yerine, koleksiyon öğeleri haline gelmesi için hedeflenen öğeleri, bir veya daha fazla öğenin alt öğelerini özelliği belirtilir. Her tür madde yükleme sırasında bir nesneye değerlendirilir ve çağırarak koleksiyona eklenen Add yöntemi, örtük bir koleksiyon. Örneğin, Triggers özelliği Style özel koleksiyon türü alır TriggerCollection, hangi Implements IList. Örneğini oluşturmak gerekli değildir bir TriggerCollection nesne öğesi biçimlendirme. Bunun yerine, bir veya daha fazla belirttiğiniz Trigger öğe içindeki öğeler olarak Style.Triggers özelliği öğe burada Trigger (veya türetilmiş bir sınıf) kesinlikle yazılı ve kapalı için öğe türü olarak beklenen türü TriggerCollection.

<Style x:Key="SpecialButton" TargetType="{x:Type Button}">
  <Style.Triggers>
    <Trigger Property="Button.IsMouseOver" Value="true">
      <Setter Property = "Background" Value="Red"/>
    </Trigger>
    <Trigger Property="Button.IsPressed" Value="true">
      <Setter Property = "Foreground" Value="Green"/>
    </Trigger>
  </Style.Triggers>
</Style>

Bu konunun sonraki bölümde ele alınan bir özellik bir koleksiyon türü ve xaml içerik özelliği türü olabilir ve türleri, türetilmiş.

Bunu bir öğe biçimlendirme görünmez olsa örtülü koleksiyon öğesi mantıksal ağaç sunumunu üye oluşturur. Genellikle üst tür Oluşturucu özellikleri biridir koleksiyonu için örnekleme gerçekleştirir ve başlangıçta boş koleksiyon Nesne Ağacı bir parçası haline gelir.

NotNot

Genel liste ve sözlük arabirimleri (IList<T> ve IDictionary<TKey, TValue>) koleksiyonu algılama. için desteklenmeyenAncak 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.

İçinde.Koleksiyon türleri için net başvuru sayfaları, bu kasıtlı bir koleksiyon için object öğesini edilebilse sözdizimiyle bazen xaml sözdizimi bölümlerinde örtülü koleksiyonu sözdizimi olarak belirtiliyor.

Kök öğesi dışında başka bir öğenin alt öğesi olarak iç içe bir xaml dosyasında her bir object öğesini gerçekten biri veya ikisi de aşağıdaki durumlarda bir öğesidir: üyesi, üst öğe veya üst öğe (xaml içerik özellikleri yaklaşan bir bölümünde açıklanmıştır) için xaml içerik özelliğinin değeri belirten bir öğe bir kapalı toplama özelliği. Başka bir deyişle, üst öğe ve alt öğeleri biçimlendirme sayfasında gerçekten kökünde tek bir nesne ilişkisidir ve her nesneyi kökün ana özellik değeri sağlayan tek bir örneği ya da ana koleksiyon türü özelliği değeri aynı zamanda olan koleksiyonu içindeki öğelerden birini öğesidir. Bu tek kök kavramı ile xml yaygındır ve xaml gibi yükleme API'leri davranışındaki sık güçlendirilmiş Load.

Aşağıdaki örnek bir toplama için object öğesini içeren bir sözdizimi aşağıdaki gibidir (GradientStopCollection) açıkça belirtilen.

<LinearGradientBrush>
  <LinearGradientBrush.GradientStops>
    <GradientStopCollection>
      <GradientStop Offset="0.0" Color="Red" />
      <GradientStop Offset="1.0" Color="Blue" />
    </GradientStopCollection>
  </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

Bunu her zaman açıkça koleksiyonu bildirmek olası değildir. Örneğin, bildirmek çalışılıyor TriggerCollection açıkça, daha önce gösterilen Triggers örnek olur başarısız. Koleksiyon açıkça bildirmek gerekir varsayılan bir oluşturucu toplama sınıfı desteklemelidir ve TriggerCollection yok bir varsayılan kurucu.

xaml içerik özellikleri

xaml içerik sözdizimidir yalnızca belirttiğiniz sınıflar üzerinde etkin bir sözdizimi ContentPropertyAttribute bir parçası olarak kendi sınıf bildirimi. ContentPropertyAttribute (Türetilmiş sınıflar dahil) öğe türünün içerik özelliği özellik adını başvurur. xaml işlemcisi tarafından işlendiğinde, o nesne için xaml içerik özelliğinin değeri olarak herhangi bir alt öğe veya açýlýþ ve kapanýþ etiketleri nesne öğesinin arasında bulunan iç metin atanacaktır. İçerik özelliği açık özellik öğeleri belirtmek için izin verilir, ancak bu kullanım xaml sözdizimi bölümlerinde genellikle gösterilmez.net başvurusu. Açık/ayrıntılı teknik biçimlendirme Netlik veya biçimlendirme stili ilkesel olarak zaman zaman değeri, ancak genellikle içerik özelliği amacı postayı kolayca ana-alt ilgili öğeleri doğrudan iç içe olduğunu işaretleme daha verimli kullanmak. Öğedeki diğer özellikler için öğe etiketlerini özelliği "içerik" olarak atanmaz Her katı bir xaml dilini tanım; Bunlar daha önce xaml parser'ın işleme sırayla işlenir ve "içerik" olarak kabul edilir değil.

xaml içerik özellik değerlerini bitişik olmalıdır

xaml içerik özelliğinin değeri tamamen önce veya tamamen başka bir özellik öğelerinin sonra o nesnesi öğesinde verilmelidir. xaml içerik özelliğinin değerini bir dize veya bir veya daha fazla nesne olarak belirtilmiş olup, bu doğrudur. Örneğin, aşağıdaki biçimlendirme ayrıştırmaz:

<Button>I am a 
  <Button.Background>Blue</Button.Background>
  blue button</Button>

Bu aslında yasadışı içerik özellik için özellik öğesi sözdizimini kullanarak bu sözdizimi açık yapıldı, sonra içerik özelliği iki kez ayarlanmış olduğundan:

<Button>
  <Button.Content>I am a </Button.Content>
  <Button.Background>Blue</Button.Background>
  <Button.Content> blue button</Button.Content>
</Button>

Bir benzer şekilde yasadışı içerik özelliği bir topluluktur ve alt öğeleri özellik öğelerinin interspersed örnektir:

<StackPanel>
  <Button>This example</Button>
  <StackPanel.Resources>
    <SolidColorBrush x:Key="BlueBrush" Color="Blue"/>
  </StackPanel.Resources>
  <Button>... is illegal XAML</Button>
</StackPanel>

İçerik özellikleri ve birleştirilmiş koleksiyonu sözdizimi

Kabul etmek için bir tek nesne öğesi, içerik olarak daha fazla içerik özelliği özellikle koleksiyon türü türünde olmalıdır. Koleksiyon türleri için özellik öğesi sözdizimine benzer, xaml işlemci koleksiyon türleri türlerini tanımlamalısınız. xaml içerik özelliği bir öğe varsa ve xaml içerik özelliği bir koleksiyon türüdür, örtük koleksiyon türü bir nesne öğesi olarak işaretleme belirtilmesi gerekmez ve xaml içerik özelliği özellik öğesi olarak belirtilmesi gerekmez. Bu nedenle biçimlendirme görünür içerik modelinde artık birden fazla alt öğe içeriği olarak atanmış olabilir. Aşağıdaki içerik sözdizimidir bir Panel türetilmiş sınıfa Tüm Panel türetilmiş sınıflar kurmak xaml içerik özelliği olması için Childrenbir değer türünün gerektirdiği UIElementCollection.

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  >
  <StackPanel>
    <Button>Button 1</Button>
    <Button>Button 2</Button>
    <Button>Button 3</Button>
  </StackPanel>
</Page>

Dikkat edin ne özellik öğesinin Children ne de öğe için UIElementCollection gerekli biçimlendirme. Yinelemeli olarak tanımlayan öğeler içerdiği için bu tasarım xaml özelliğidir bir UI postayı kolayca daha temsil olarak bir ağaç iç içe geçmiş öğelerini ilişkilerle hemen üst-alt öğesi, aradaki özellik öğe etiketleri veya nesneleri koleksiyonu. Aslında, UIElementCollection göre bir object öğesini olarak işaretleme, açıkça belirtilemeztasarım. Çünkü yalnızca kullanım amacı kapalı bir topluluk olarak UIElementCollection değil göstermek genel varsayılan bir oluşturucusu ve böylece edemiyor örneği olarak bir nesne öğesi.

Özellik öğelerinin ve içerik özelliği olan bir nesnenin nesne öğeleri karıştırma

xaml belirtimi xaml İşlemci nesnesi öğesinde xaml içerik özelliği doldurmak için kullanılan nesne öğelerini bitişik olmalı ve değil karışık olmalı zorlayabilir bildirir. Özellik öğelerinin ve içerik karıştırma karşı bu kısıtlama tarafından zorlanır WPF xaml işlemciler.

İlk olarak hemen bir object öğesini iþaretleme olarak bir alt nesne öğesi olabilir. Daha sonra özellik öğelerinin yaratabilir. Ya da bir veya daha fazla özellik öğelerinin, sonra içerik sonra daha fazla özellik öğeleri belirtebilirsiniz. Ancak bir özellik öğesinin içeriği izleyen bir kez herhangi bir içeriği tanıtmak yapamazsınız, yalnızca özellik öğeleri ekleyebilirsiniz.

Bu içerik / özelliği öğe sipariş gereksinim içerik olarak kullanılan iç metin için geçerli değildir. Ancak, hala önemli boşluk özellik öğelerinin iç metinle interspersed, görsel olarak işaretlemeyi algılamak zor olacağı için iç metin bitişik, tutmak için iyi bir biçimlendirme stili vardır.

XAML Namespaces

Yukarıdaki sözdizimi örnekleri hiçbiri varsayılan xaml ad alanı dışındaki bir xaml ad alanı belirtilmiş. Tipik olarak WPF uygulamaları, xaml ad alanı varsayılan olarak belirtilen WPF ad. Varsayılan xaml ad alanı dışındaki xaml ad belirtin ve yine de benzer bir sözdizimi kullanın. Ancak daha sonra herhangi bir yere bir sınıf olan varsayılan xaml ad alanı içinde erişilebilir değil burada adlı bu sınıf adı xaml ad alanı öneki ile karşılık gelen clr ad alanına eşlenen gibi gelmelidir. Örneğin, <custom:Example/> bir örneğini oluşturmak için nesne öğesi sözdizimi Example sınıfı, burada o sınıfın (ve büyük olasılıkla yedekleme türlerini içeren dış derleme bilgileri) içeren clr ad önceden eşlenmiş custom öneki.

xaml ad alanları hakkında daha fazla bilgi için bkz: WPF XAML İçin XAML Ad Uzayları ve Ad Uzayı Eşlemesi.

Biçimlendirme uzantıları

xaml normal xaml işlemci işlenmesi dize özniteliği değerleri veya nesne öğelerini gelen bir kaçış sağlar ve işlem yedekleme sınıfına defers varlık programlama bir biçimlendirme uzantısını tanımlar. Öznitelik sözdizimi kullanılırken bir biçimlendirme uzantısı bir xaml işlemciye tanımlayan kapama küme ayracı (}) dışında herhangi bir karakter arkasından açma kaşlı ayraç ({}) karakteridir. Açýlýþ küme parantezine izleyen ilk dize tam olarak nereye başvuru alt dize almaz belirli bir uzantıyı davranışı "Uzantı" sağlayan sınıf başvurmalıdır Bu alt dize doğru sınıf adının parçasıysa. Bundan sonra tek bir boşluk görünebilir ve kapanýþ küme parantezine karşılaştı kadar sonra izleyen her karakteri girdi olarak uzantısı uygulama tarafından kullanılır.

.net xaml uygulaması kullanan MarkupExtension tarafından desteklenen biçimlendirme uzantıları için temel olarak soyut bir sınıf WPF yanı sıra diğer çerçeveleri veya teknolojileri. Biçimlendirme uzantıları, WPF özellikle Implements genellikle diğer varolan nesneleri başvuracak veya nesnelere, değerlendirilen çalışma saati. Ertelenen başvuru yapma olanağı sağlamak için hedeflenen Örneğin, basit bir wpf veri bağlama belirterek yapılır {Binding} İşaretleme uzantısı yerine değeri, belirli bir özellik olduğu normalde Al. wpf işaretleme uzantılarının çoğunu bir öznitelik sözdizimi burada bir öznitelik sözdizimi Aksi mümkün olamazdı özellikleri etkinleştirin. Örneğin, bir Style nesnedir oldukça karmaþýk tür nesneler ve iç içe bir dizi içerirözellikler. wpf stilleri genellikle kaynak olarak tanımlanan bir ResourceDictionaryve bir kaynak isteği iki wpf işaretleme uzantılarından birine başvuruda Biçimlendirme uzantısı kaynak arama özelliği değerine değerlendirmesini defers ve değerini sağlama sağlar Style türü alma özelliği Style, öznitelik sözdizimi aşağıdaki örnekte olduğu gibi:

<Button Style="{StaticResource MyStyle}">My button</Button>

Burada, StaticResource tanımlayan StaticResourceExtension sınıf sağlayan biçimlendirme uzantısı uygulama. Sonraki dize MyStyle için varsayılan olmayan girdi olarak kullanılan StaticResourceExtension kurucusu, burada parametre olarak çekilen uzantısı dizesinden bildirir istenen ResourceKey. MyStyleBeklenen X: anahtar değeri bir Style tanımlı olarak kaynak. StaticResource Biçimleme Uzantısı Kullanım ister kaynak kullanılmasını sağlamak için Style özellik değeri üzerinden statik kaynak arama mantığı yük zaman.

For more information about markup extensions, see Biçimlendirme Uzantıları ve WPF XAML. Biçimlendirme uzantıları ve diğer xaml başvuru için genel etkinleştirdiği özellikler programlama.net xaml uygulaması, bkz: XAML isim uzayı (x:) Dil özellikleri. wpf özgü biçimlendirme uzantıları için bkz: WPF XAML Ekleri.

Attached Properties

Eklenen özelliklerdir alınabildiği özelliklerine sahip olduğu ve olması belirli bir türü tanımlanan xaml tanıtılan bir programlama kavramı ancak ayarlanmış öznitelikler veya özellik öğeleri olarak herhangi bir öğe. Birincil senaryo eklenmiş özellikler için tasarlanmıştır üst öğe için rapor bilgilere Biçimleme yapısında alt öğeler tüm öğeler arasında yaygın olarak paylaşılan nesne modeli gerektirmeden etkin kılmaktır. Tersine, üst öğeleri alt öğe için rapor bilgilere göre eklenen özellikler kullanılabilir. Özellikler eklenmiş özellikleri ve kendi oluşturma hakkında daha fazla bilgi amacını bağlı için bkz: Ekli Özelliklere Genel Bakış.

Ekli özelliklerini de belirttiğiniz özelliği öğesi sözdizimi, superficially benzer bir sözdizimi kullanın bir typeName.propertyName birlikte. İki önemli farklar vardır:

  • Kullanabileceğiniz typeName.propertyName birlikte öznitelik sözdizimi ile ekli bir özelliğini ayarlarken bile. Ekli yalnızca özellik adı uygun yerlerde zorunlu bir öznitelik sözdizimi durumdur özelliklerdir.

  • Özellik öğesi sözdizimi bağlı özelliklerini de kullanabilirsiniz. Ancak, tipik özelliği öğesi sözdizimi için typeName belirttiğiniz özellik elemanı içeren nesne öğe. İliştirilmiş bir özellik için başvuruyorsanız sonra typeName bağlı özellik içeren object öğesini tanımlayan sınıf.

Attached Events

Burada olayları belirli bir türü tanımlanabilir, ancak herhangi bir nesne öğe işleyicileri iliştirilebilir xaml sunulan başka bir programlama kavram bağlı olaylardır. wof uygulamasında genellikle ekli olay tanımlayan bir hizmeti tanımlayan bir statik türde türüdür ve ekli olayları tarafından yönlendirilen olay diğer ad hizmetini duyurmak türleri bazen maruz kalır. Ekli olaylar için işleyiciler öznitelik sözdizimi ile belirtilir. Ekli olaylarıyla öznitelik sözdizimi izin vermek iliştirilmiş olaylar için genişletilir gibi bir typeName.eventName kullanımı, burada typeName sağlayan sınıf olan Add ve Remove olay işleyicisi erişimcileri bağlanmış olay altyapısı için ve eventName olay adıdır.

xaml kök öğesinin anatomisi

Aşağıdaki tabloda, belirli bir kök öğesi özniteliklerini gösteren aşağı kırık tipik xaml kök öğesi gösterilmektedir:

<Page

Kök öğesinin nesne öğesi açma

xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"

Varsayılan (WPF) xaml ad

xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"

xaml dili xaml ad

x:Class="ExampleNamespace.ExampleCode"

Biçimlendirme herhangi kod arkada bağlanan kısmi sınıf bildirimi için kısmi sınıf tanımlı

>

Kök için object öğesini sonu. Bir öğe alt öğe içerdiği için nesne henüz kapalı değil

xaml kullanımı isteğe bağlıdır ve Nonrecommended

Aşağıdaki bölümlerde, teknik açıdan xaml işlemcileri tarafından desteklenen, ancak ayrıntı ya da ne zaman kullanıcı tarafından okunabilen kalan xaml dosyaları ile engel diğer estetik sorunlar üretmek xaml kullanımları açıklanmıştır, xaml kaynakları içeren uygulamalar geliştirmek.

İsteğe bağlı özellik öğe kullanımı

xaml işlemci kapalı olarak değerlendirir öğe içerik özellikleri açıkça yazmak isteğe bağlı özellik öğesi kullanımları içerir. Örneğin, ne zaman size bildirmek içeriğini bir Menu, açıkça bildirmek seçebilir Items topluluğu Menu olarak bir <Menu.Items> özelliği öğe etiketi ve her yeri MenuItem içinde <Menu.Items>, örtülü xaml işlemci davranışını kullanan yerine, tüm alt öğelerini bir Menu olmalıdır bir MenuItem yerleştirilir ve Items koleksiyonu. Bazen isteğe bağlı kullanımları, görsel olarak işaretlemeyi temsil edildiği gibi nesne yapısını açıklamak için yardımcı olabilir. Ya da bazen açık özelliği öðe kullanýmý görsel olarak, bir öznitelik değeri içinde yuvalanmış işaretleme uzantıları gibi kafa ancak teknik olarak işlev işaretleme önleyebilirsiniz.

Tam typeName.memberName nitelenmiş öznitelikler

TypeName.ÜyeAdı yönlendirilen olay böyle daha evrensel bir nitelik gerçekten çalışır için form. Ancak diğer durumların o gereksiz biçimidir ve yalnızca nedenleriyle biçimlendirme stili ve okunaklı olması durumunda, kaçınmalısınız. Aşağıdaki örnekte, her üç için başvuran Background özniteliği tümüyle eşdeğer:

<Button Background="Blue">Background</Button>
<Button Button.Background="Blue">Button.Background</Button>
<Button Control.Background="Blue">Control.Background</Button>

Button.Backgroundçalışır çünkü bu özelliği için tam arama Button başarılı olur (Background denetimden devralınmıştı) ve Button object öğesini veya temel sınıfa sınıftır Control.Backgroundçünkü çalışır Control gerçekten sınıfı tanımlar Background ve Control olan bir Button temel sınıfa

Ancak, aşağıdaki typeName.ÜyeAdı form örneği çalışmıyor ve böylece açıklamalı gösterilir:

<!--<Button Label.Background="Blue">Does not work</Button> -->

Labelbaşka bir türetilmiş sınıfıdır Control, ve belirtilen, Label.Background içinde bir Label object öğesini, bu kullanım çalışılan. Ancak, çünkü Label değil sınıf veya sınıfının temel sınıfı olan Button, belirtilen xaml işlemci davranıştır sonra işlemek için Label.Background olarak iliştirilmiş bir özellik. Label.Backgroundkullanılabilir iliştirilmiş bir özellik değildir ve bu kullanımı başarısız olur.

baseTypeName.memberName özellik öğelerinin

Benzer bir şekilde nasıl typeName.ÜyeAdı formu öznitelik sözdizimi için çalışan bir baseTypeName.ÜyeAdı sözdizimi özelliği öğesi sözdizimi için çalışır. Örneğin, aşağıdaki sözdizimi çalışır:

<Button>Control.Background PE
  <Control.Background>
    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
      <GradientStop Color="Yellow" Offset="0.0" />
      <GradientStop Color="LimeGreen" Offset="1.0" />
    </LinearGradientBrush>
    </Control.Background>
</Button>

Özellik öğesi olarak burada verilen Control.Background olsa özelliği öğe yer alan Button.

Ama olduğu gibi typeName.ÜyeAdı öznitelikleri, form baseTypeName.ÜyeAdı zayıf stilinde biçimlendirme olduğunu ve kaçınmanız gerekir.

Ayrıca bkz.

Kavramlar

XAML'e Genel Bakış (WPF)

Bağımlılık Özellikleri Genel Bakış

TypeConverters ve XAML

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

Diğer Kaynaklar

XAML isim uzayı (x:) Dil özellikleri

WPF XAML Ekleri