Aracılığıyla paylaş


XAML söz dizimi kılavuzu

XAML söz dizimi kurallarını ve XAML söz dizimi için kullanılabilir kısıtlamaları veya seçenekleri açıklayan terminolojiyi açıklıyoruz. XAML dilini kullanmaya yeni yeniyseniz, söz diziminin terminolojisi veya bölümleri hakkında yenileyici istiyorsanız veya XAML dilinin nasıl çalıştığını merak ediyorsanız ve daha fazla arka plan ve bağlam istiyorsanız bu konuyu yararlı bulacaksınız.

XAML XML'dir

Genişletilebilir Uygulama Biçimlendirme Dili 'nin (XAML) XML üzerinde derleyen temel bir söz dizimi vardır ve tanım gereği geçerli XAML geçerli XML olmalıdır. Ancak XAML'nin XML'yi genişleten kendi söz dizimi kavramları da vardır. Belirli bir XML varlığı düz XML'de geçerli olabilir, ancak söz diziminde XAML olarak farklı ve daha eksiksiz bir anlam bulunabilir. Bu konuda bu XAML söz dizimi kavramları açıklanmaktadır.

XAML sözlükleri

XAML'nin çoğu XML kullanımından farklı olduğu alanlardan biri, XAML'nin genellikle XSD dosyası gibi bir şemayla zorlanmamasıdır. Bunun nedeni XAML'nin genişletilebilir olmasıdır. Bunun nedeni XAML kısaltmasında "X" ifadesidir. XAML ayrıştırıldıktan sonra, XAML'de başvurduğunuz öğelerin ve özniteliklerin, Windows Çalışma Zamanı tarafından tanımlanan çekirdek türlerde veya Windows Çalışma Zamanı'nı genişleten veya temel alan türlerde bazı yedekleme kodu gösteriminde bulunması beklenir. SDK belgeleri bazen Windows Çalışma Zamanı'nda yerleşik olan türleri ifade eder ve Windows Çalışma Zamanı için XAML sözlüğü olarak XAML'de kullanılabilir. Microsoft Visual Studio, bu XAML sözlüğünde geçerli olan işaretlemeler oluşturmanıza yardımcı olur. Visual Studio, projede bu türlerin kaynağına doğru başvurulabildiği sürece XAML kullanımı için özel türlerinizi de içerebilir. XAML ve özel türler hakkında daha fazla bilgi için bkz. XAML ad alanları ve ad alanı eşlemesi.

Nesneleri bildirme

Programcılar genellikle nesneler ve üyeler açısından düşünürken, işaretleme dili öğeler ve öznitelikler olarak kavramsallaştırılır. En temel anlamda, XAML işaretlemesinde bildirdiğiniz bir öğe, bir yedekleme çalışma zamanı nesne gösteriminde bir nesneye dönüşür. Uygulamanız için bir çalışma zamanı nesnesi oluşturmak için XAML işaretlemesinde bir XAML öğesi bildirirsiniz. Nesnesi, Windows Çalışma Zamanı XAML'nizi yüklediğinde oluşturulur.

XAML dosyası her zaman kendi kökü olarak hizmet veren tam olarak bir öğeye sahiptir. Bu öğe, sayfa gibi bir programlama yapısının kavramsal kökü olacak bir nesneyi veya bir uygulamanın tüm çalışma zamanı tanımının nesne grafiğini bildirir.

XAML söz dizimi açısından, XAML'de nesneleri bildirmenin üç yolu vardır:

  • Nesne öğesi söz dizimi kullanılarak doğrudan: Bu, bir nesneyi XML form öğesi olarak örneklemek için açma ve kapatma etiketlerini kullanır. Kök nesneleri bildirmek veya özellik değerlerini ayarlayan iç içe nesneler oluşturmak için bu söz dizimini kullanabilirsiniz.
  • Dolaylı olarak, öznitelik söz dizimi kullanılarak: Bu, nesne oluşturma yönergelerini içeren bir satır içi dize değeri kullanır. XAML ayrıştırıcısı, bir özelliğin değerini yeni oluşturulan başvuru değerine ayarlamak için bu dizeyi kullanır. Bunun için destek, belirli ortak nesneler ve özelliklerle sınırlıdır.
  • İşaretleme uzantısı kullanma.

Bu, XAML sözlüğünde nesne oluşturma için her zaman herhangi bir söz dizimi seçeneğiniz olduğu anlamına gelmez. Bazı nesneler yalnızca nesne öğesi söz dizimi kullanılarak oluşturulabilir. Bazı nesneler yalnızca başlangıçta bir öznitelikte ayarlanarak oluşturulabilir. Aslında, nesne öğesi veya öznitelik söz dizimi ile oluşturulabilen nesneler, XAML sözcük dağarcığında nispeten nadirdir. Her iki söz dizimi formu da mümkün olsa bile, söz dizimlerinden biri stil açısından daha yaygın olacaktır. Yeni değerler oluşturmak yerine mevcut nesnelere başvurmak için XAML'de kullanabileceğiniz teknikler de vardır. Mevcut nesneler XAML'nin diğer alanlarında tanımlanabilir veya platformun ve uygulama veya programlama modellerinin bazı davranışlarıyla örtük olarak bulunabilir.

Nesne öğesi söz dizimi kullanarak nesne bildirme

Nesne öğesi söz dizimine sahip bir nesne bildirmek için, şuna benzer etiketler yazarsınız: <objectName> </objectName>burada objectName , örneğini başlatmak istediğiniz nesnenin tür adıdır. Bir Canvas nesnesini bildirmek için nesne öğesi kullanımı aşağıdadır:

<Canvas>
</Canvas>

Nesne başka nesneler içermiyorsa, nesne öğesini açma/kapatma çifti yerine bir kendi kendine kapanış etiketi kullanarak bildirebilirsiniz: <Canvas />

Containers

Tuval gibi kullanıcı arabirimi öğeleri olarak kullanılan birçok nesne başka nesneler içerebilir. Bunlar bazen kapsayıcı olarak adlandırılır. Aşağıdaki örnekte, bir öğe olan Rectangle içeren bir Canvas kapsayıcısı gösterilmektedir.

<Canvas>
  <Rectangle />
</Canvas>

Öznitelik söz dizimi kullanarak nesne bildirme

Bu davranış özellik ayarına bağlı olduğundan, bunu önümüzdeki bölümlerde daha fazla konuşacağız.

Başlatma metni

Bazı nesneler için, derleme için başlatma değerleri olarak kullanılan iç metni kullanarak yeni değerler bildirebilirsiniz. XAML'de bu teknik ve söz dizimi başlatma metni olarak adlandırılır. Kavramsal olarak, başlatma metni parametreleri olan bir oluşturucuyu çağırmaya benzer. Başlatma metni, belirli yapıların başlangıç değerlerini ayarlamak için kullanışlıdır.

Bir x:Key ile bir yapı değeri istiyorsanız, ve bunun bir Kaynak Sözlüğünde var olabilmesini istiyorsanız, genellikle başlatma metniyle bir nesne öğesi söz dizimi kullanırsınız. Bu yapı değerini birden çok hedef özellik arasında paylaşırsanız bunu yapabilirsiniz. Bazı yapılar için, yapının değerlerini ayarlamak için öznitelik söz dizimini kullanamazsınız: yararlı ve paylaşılabilir bir CornerRadius, Kalınlık, GridLength veya Color kaynağı oluşturmanın tek yolu başlatma metnidir.

Bu kısaltılmış örnekte, bir Kalınlık değerlerini belirtmek için başlatma metni kullanılır; bu örnekte hem Sol hem de Sağ değerlerini 20'ye, hem Üst hem de Alt değerini 10 olarak ayarlayan değerler belirtilir. Bu örnekte anahtarlı kaynak olarak oluşturulan Kalınlık ve ardından bu kaynağa başvuru gösterilir. Kalınlık başlatma metni hakkında daha fazla bilgi için bkz Kalınlık.

<UserControl ...>
  <UserControl.Resources>
    <Thickness x:Key="TwentyTenThickness">20,10</Thickness>
    ....
  </UserControl.Resources>
  ...
  <Grid Margin="{StaticResource TwentyTenThickness}">
  ...
  </Grid>
</UserControl ...>

Uyarı

Bazı yapılar nesne öğeleri olarak bildirilemiyor. Başlatma metni desteklenmez ve kaynak olarak kullanılamaz. XAML'de özellikleri bu değerlere ayarlamak için bir öznitelik söz dizimi kullanmanız gerekir. Bu türler şunlardır: Duration, RepeatBehavior, Point, Rect ve Size.

Özellikleri ayarlama

Nesne öğesi söz dizimini kullanarak bildirdiğiniz nesnelerde özellikleri ayarlayabilirsiniz. XAML'de özellikleri ayarlamanın birden çok yolu vardır:

  • Öznitelik sözdizimini kullanarak.
  • Özellik öğesi sözdizimini kullanarak.
  • Bir nesnenin XAML içerik özelliğini ayarlamak için içeriğin (iç metin veya alt öğeler) kullanıldığı öğe söz dizimini kullanarak.
  • Bir koleksiyon söz dizimi kullanarak (genellikle örtük koleksiyon söz dizimidir).

Nesne bildiriminde olduğu gibi, bu liste herhangi bir özelliğin tekniklerin her biriyle ayarlanabileceği anlamına gelmez. Bazı özellikler tekniklerden yalnızca birini destekler. Bazı özellikler birden fazla formu destekler; örneğin, özellik öğesi söz dizimlerini veya öznitelik söz dizimlerini kullanabilen özellikler vardır. Mümkün olan hem özelliğine hem de özelliğin kullandığı nesne türüne bağlıdır. Windows Çalışma Zamanı API'sinin başvurusunda Söz Dizimi bölümünde kullanabileceğiniz XAML kullanımlarını görürsünüz. Bazen işe yarayabilecek ancak daha ayrıntılı olabilecek alternatif bir kullanım vardır. Bu ayrıntılı kullanımlar her zaman gösterilmez çünkü size XAML'de bu özelliği kullanmak için en iyi yöntemleri veya gerçek dünya senaryolarını göstermeye çalışıyoruz. XAML söz dizimi kılavuzu, XAML'de ayarlanabilen özellikler için başvuru sayfalarının XAML Kullanımı bölümlerinde sağlanır.

Nesnelerdeki bazı özellikler XAML'de herhangi bir yolla ayarlanamaz ve yalnızca kod kullanılarak ayarlanabilir. Bu özellikler genellikle XAML'de değil de kod arkası bölümünde çalışmak için daha uygundur.

Salt okunur bir özellik XAML'de ayarlanamaz. Kodda bile, sahip türün, oluşturucu aşırı yüklemesi, yardımcı yöntem veya hesaplanan özellik desteği gibi başka bir şekilde ayarlamayı desteklemesi gerekir. Hesaplanan özellik, diğer ayarlanabilir özelliklerin değerlerine ve bazen yerleşik işlemeye sahip bir olaya dayanır; bu özellikler bağımlılık özellik sisteminde kullanılabilir. Bağımlılık özelliklerinin hesaplanmış özellik desteği için nasıl yararlı olduğu hakkında daha fazla bilgi için bkz . Bağımlılık özelliklerine genel bakış.

XAML'deki koleksiyon söz dizimi, sanki salt okunur bir özelliği ayarlıyormuşsunuz gibi bir izlenim verir, ancak aslında durum böyle değildir. Bu konunun devamında yer alan "Koleksiyon Söz Dizimi" bölümüne bakın.

Öznitelik söz dizimlerini kullanarak özellik ayarlama

Öznitelik değerinin ayarlanması, biçimlendirme dilinde (örneğin XML veya HTML) bir özellik değeri ayarladığınız tipik araçlardır. XAML özniteliklerini ayarlamak, XML'de öznitelik değerlerini ayarlamanıza benzer. Öznitelik adı, öğe adından sonra etiketlerin herhangi bir noktasında belirtilir ve öğe adından en az bir boşlukla ayrılır. Öznitelik adının ardından eşittir işareti eklenir. Öznitelik değeri bir çift tırnak içinde yer alır. Tırnak işaretleri, değeri eşleştirip içine aldıkları sürece çift tırnak veya tek tırnak olabilir. Öznitelik değerinin kendisi bir dize olarak ifade edilebilir olmalıdır. Dize genellikle sayıları içerir, ancak XAML için tüm öznitelik değerleri, XAML ayrıştırıcısı dahil edilene ve bazı temel değer dönüştürmeleri gerçekleştirene kadar dize değerleridir.

Bu örnekte, bir Dikdörtgen nesnesinin Ad, Genişlik, Yükseklik ve Dolgu özelliklerini ayarlamak için dört öznitelik söz dizimi kullanılmaktadır.

<Rectangle Name="rectangle1" Width="100" Height="100" Fill="Blue" />

Özellik öğesi söz dizimlerini kullanarak özellik ayarlama

Bir nesnenin birçok özelliği, özellik öğesi söz dizimi kullanılarak ayarlanabilir. Bir özellik öğesi şuna benzer: <object.özelliği>.

Özellik öğesi söz dizimini kullanmak için, ayarlamak istediğiniz özellik için XAML özellik öğeleri oluşturursunuz. Standart XML'de bu öğe yalnızca adında nokta bulunan bir öğe olarak kabul edilir. Ancak, XAML'de, öğe adındaki nokta öğeyi bir özellik öğesi olarak tanımlar ve özelliğin bir arka nesne modeli uygulamasında nesnenin üyesi olması beklenir. Özellik öğesi söz dizimini kullanmak için, özellik öğesi etiketlerini "doldurmak" için bir nesne öğesi belirtmek mümkün olmalıdır. Özellik öğesi her zaman bazı içeriğe (tek öğe, birden çok öğe veya iç metin) sahip olur; kendi kendini kapatan bir özellik öğesine sahip olmanın bir anlamı yoktur.

Aşağıdaki dilbilgisinde özellik , ayarlamak istediğiniz özelliğin adıdır ve propertyValueAsObjectElement özelliğin değer türü gereksinimlerini karşılaması beklenen tek bir nesne öğesidir.

< nesne>

< nesne.özellik>

propertyValueAsObjectElement

</ nesne.özellik>

</ nesne>

Aşağıdaki örnek, Fill öğesini bir SolidColorBrush nesne öğesiyle ayarlamak için özellik öğesi sözdizimini kullanır. ( SolidColorBrush içinde Color bir öznitelik olarak ayarlanır.) Bu XAML'nin ayrıştırılmış sonucu, öznitelik söz dizimini kullanarak doldur'u ayarlayan önceki XAML örneğiyle aynıdır.

<Rectangle
  Name="rectangle1"
  Width="100" 
  Height="100"> 
  <Rectangle.Fill> 
    <SolidColorBrush Color="Blue"/> 
  </Rectangle.Fill>
</Rectangle>

XAML kelime hazineleri ve nesne odaklı programlama

Windows Çalışma Zamanı XAML türünün XAML üyeleri olarak görünen özellik ve olaylar genellikle temel türlerden devralınır. Şu örneği göz önünde bulundurun: <Button Background="Blue" .../>. Background özelliği, Button sınıfında hemen bildirilen bir özellik değildir. Bunun yerine , Arka plan temel Control sınıfından devralınır. Aslında, Button için başvuru konusuna bakarsanız, üye listelerinin ardışık temel sınıf zincirinin her birinden en az bir devralınan üye içerdiğini görürsünüz: ButtonBase, Control, FrameworkElement, UIElement, DependencyObject. Özellikler listesinde, tüm okuma-yazma özellikleri ve koleksiyon özellikleri bir XAML kelime dağarcığında devralınır. Olaylar (çeşitli UIElement olayları gibi) de devralınır.

XAML kılavuzu için Windows Runtime referansını kullanırsanız, sözdiziminde veya örnek kodda gösterilen öğe adı bazen özelliği ilk tanımlayan tip için olabilir, çünkü bu başvuru konusu temel sınıftan devralan tüm mevcut türler tarafından paylaşılır. XML düzenleyicisinde Visual Studio'nun XAML için IntelliSense'ini kullanıyorsanız, IntelliSense ve açılır listeleri, mirasın birleştirilmesi işini başarılı bir şekilde yapar ve bir sınıf örneği için nesne öğesiyle çalışmaya başladıktan sonra ayarlanabilir özniteliklerin doğru bir listesini sağlar.

XAML içerik özellikleri

Bazı türler, özelliği XAML içerik söz dizimini etkinleştirebilecek şekilde kendi özelliklerinden birini tanımlar. Bir türün XAML içerik özelliği için, XAML'de belirtirken bu özelliğin özellik öğesini atlayabilirsiniz. İsterseniz, özelliği, ilgili türün nesne eleman etiketleri içinde doğrudan bu içeriği sağlayarak bir iç metin değerine ayarlayabilirsiniz. XAML içerik özellikleri bu özellik için basit işaretleme söz dizimini destekler ve iç içe yerleştirmeyi azaltarak XAML'yi daha insan tarafından okunabilir hale getirir.

Bir XAML içerik sözdizimi mevcutsa, bu sözdizimi Windows Çalışma Zamanı başvuru belgelerinin "XAML" bölümlerinde gösterilecektir. Örneğin, Border için Alt özellik sayfası, Border'ın tek nesneli Border.Child değerini ayarlamak için özellik öğesi söz dizimi yerine XAML içerik söz dizimini gösterir, örneğin:

<Border>
  <Button .../>
</Border>

XAML içerik özelliği olarak bildirilen özellik Nesne türü veya Dize türündeyse, XAML içerik söz dizimi XML belge modelinde temel olarak iç metni destekler: açma ve kapatma nesnesi etiketleri arasındaki bir dize. Örneğin, Text özelliği için TextBlock özellik sayfası, Text ayarlamak için bir iç metin değerine sahip olan XAML içerik söz dizimini gösterir, ancak işaretlemede hiçbir zaman "Text" dizesi görüntülenmez. Aşağıda örnek bir kullanım verilmiştir:

<TextBlock>Hello!</TextBlock>

Bir sınıfın XAML içerik özelliği varsa, bu, sınıfın "Öznitelikler" bölümündeki başvuru konusuna belirtilir. ContentPropertyAttribute değerini arayın. Bu öznitelik, "Ad" adlı bir alan kullanır. "Name" değeri, XAML içerik özelliği olan sınıfın özelliğinin adıdır. Örneğin, Kenarlık referans sayfasında şunu görebilirsiniz: ContentProperty("Name=Child").

Belirtmemiz gereken önemli bir XAML söz dizimi kuralı, XAML içerik özelliğini ve öğesinde ayarladığınız diğer özellik öğelerini karıştıramamanızdır. XAML içerik özelliği, herhangi bir özellik öğesinden önce veya tamamen sonra ayarlanmalıdır. Örneğin, bu geçersiz XAML' dir:

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

Derleme söz dizimi

Şu ana kadar gösterilen söz dizimlerinin tümü, özellikleri tek nesnelere ayarlıyor. Ancak birçok kullanıcı arabirimi senaryosu, belirli bir üst öğenin birden çok alt öğeye sahip olmasını gerektirir. Örneğin, bir giriş formunun kullanıcı arabirimi için birkaç metin kutusu öğesi, bazı etiketler ve belki de bir "Gönder" düğmesi gerekir. Yine de, bu birden çok öğeye erişmek için bir programlama nesne modeli kullanırsanız, bunlar genellikle her öğenin farklı özelliklerin değeri yerine tek bir koleksiyon özelliğindeki öğeler olur. XAML birden çok alt öğeyi destekler ve koleksiyon türünü kullanan özellikleri örtük olarak değerlendirerek ve koleksiyon türünün herhangi bir alt öğesi için özel işleme gerçekleştirerek tipik bir yedekleme koleksiyonu modelini destekler.

Birçok koleksiyon özelliği de sınıfı için XAML içerik özelliği olarak tanımlanır. Örtük koleksiyon işleme ve XAML içerik söz dizimi birleşimi genellikle paneller, görünümler veya öğe denetimleri gibi denetim birleştirme için kullanılan türlerde görülür. Örneğin, aşağıdaki örnek bir StackPanel içinde iki eş kullanıcı arabirimi öğesi oluşturmak için mümkün olan en basit XAML'yi gösterir.

<StackPanel>
  <TextBlock>Hello</TextBlock>
  <TextBlock>World</TextBlock>
</StackPanel>

XAML koleksiyonu söz diziminin mekanizması

İlk başta XAML'nin salt okunur koleksiyon özelliğinin "kümesini" etkinleştirdiği görünebilir. Gerçekte, XAML'nin burada etkinleştir istediği, mevcut bir koleksiyona öğe eklemektir. XAML desteği uygulayan XAML dili ve XAML işlemcileri, bu söz dizimini etkinleştirmek için koleksiyon türlerinin desteklenmesinde bir kurala dayanır. Genellikle, koleksiyonun belirli öğelerine başvuran bir indeksleyici veya Items özelliği gibi bir destek özelliği vardır. Genellikle, bu özellik XAML söz diziminde açık değildir. Koleksiyonlar için, XAML ayrıştırma için temel mekanizma bir özellik değil, bir yöntemdir: özellikle çoğu durumda Add yöntemi. XAML işlemcisi bir XAML koleksiyonu söz diziminde bir veya daha fazla nesne öğesiyle karşılaştığında, bu tür her nesne önce bir öğeden oluşturulur, ardından koleksiyonun Add yöntemi çağrılarak her yeni nesne içeren koleksiyona eklenir.

Bir XAML ayrıştırıcısı bir koleksiyona öğe eklediğinde, belirli bir XAML öğesinin koleksiyon nesnesinin izin verilen bir öğe alt öğesi olup olmadığını belirleyen Add yönteminin mantığıdır. Birçok koleksiyon türü, destekleyici uygulama tarafından kesin olarak belirlenmiştir; bu nedenle Add giriş parametresi, geçirilen her şeyin Add parametre türüyle eşleşmesi gerektiğini bekler.

Koleksiyon özellikleri için, koleksiyonu açıkça bir nesne öğesi olarak belirtmeye çalıştığınızda dikkatli olun. Bir XAML ayrıştırıcısı, bir nesne öğesiyle karşılaştığında yeni bir nesne oluşturur. Kullanmaya çalıştığınız koleksiyon özelliği salt okunursa, bu bir XAML ayrıştırma istisnası oluşturabilir. Yalnızca örtük koleksiyon söz dizimini kullanın; bu istisnayı görmezsiniz.

Öznitelik veya özellik öğesi söz dizimi ne zaman kullanılır?

XAML'de ayarlanabilen tüm özellikler, doğrudan değer ataması için öznitelik veya özellik öğesi söz dizimini destekler, ancak bu söz dizimlerinden herhangi biri birbirinin yerine kullanılamayabilir. Bazı özellikler söz dizimlerini ve bazı özellikler de XAML içerik özelliği gibi ek söz dizimi seçeneklerini destekler. Bir özellik tarafından desteklenen XAML söz dizimi türü, özelliğin özellik türü olarak kullandığı nesnenin türüne bağlıdır. Özellik türü çift (kayan veya ondalık), tamsayı, Boole veya dize gibi ilkel bir türse, özellik her zaman öznitelik söz dizimini destekler.

Bu özelliği ayarlamak için kullandığınız nesne türü bir dize işlenerek oluşturulabiliyorsa, özelliği ayarlamak için öznitelik söz dizimini de kullanabilirsiniz. Temel öğeler için her zaman durum budur, tür dönüştürme ayrıştırıcıda yerleşik olarak bulunur. Ancak, diğer bazı nesne türleri bir özellik öğesi içindeki nesne öğesi yerine öznitelik değeri olarak belirtilen bir dize kullanılarak da oluşturulabilir. Bunun çalışması için, belirli bir özellik tarafından desteklenen veya bu özellik türünü kullanan tüm değerler için genel olarak desteklenen bir temel tür dönüştürmesi olması gerekir. özniteliğinin dize değeri, yeni nesne değerinin başlatılması için önemli olan özellikleri ayarlamak için kullanılır. Büyük olasılıkla, belirli bir tür dönüştürücüsü, dizedeki bilgileri nasıl benzersiz olarak işlediğine bağlı olarak ortak bir özellik türünün farklı alt sınıflarını da oluşturabilir. Bu davranışı destekleyen nesne türleri, başvuru belgelerinin söz dizimi bölümünde listelenen özel bir dil bilgisi içerir. Örneğin, Brush için XAML söz dizimi, Brushtüründeki herhangi bir özellik için yeni bir SolidColorBrush değeri oluşturmak için öznitelik söz diziminin nasıl kullanılabileceğini gösterir (ve Windows Çalışma Zamanı XAML'de birçok Brush özelliği vardır).

XAML ayrıştırma mantığı ve kuralları

Bazen, XAML ayrıştırıcısının okuması gereken XAML'ye benzer bir şekilde okumak bilgilendiricidir: doğrusal sırada karşılaşılan dize belirteçleri kümesi olarak. Bir XAML ayrıştırıcısı, XAML'nin nasıl çalıştığının tanımının parçası olan bir dizi kural altında bu belirteçleri yorumlamalıdır.

Öznitelik değerinin ayarlanması, biçimlendirme dilinde (örneğin XML veya HTML) bir özellik değeri ayarladığınız tipik araçlardır. Aşağıdaki söz diziminde objectName örneğini oluşturmak istediğiniz nesnedir, propertyName bu nesnede ayarlamak istediğiniz özelliğin adıdır ve propertyValue ayarlanacak değerdir.

<objectName propertyName="propertyValue" .../>

-or-

<objectName propertyName="propertyValue">

...<!--element children -->

</objectName>

Söz dizimleri, bir nesneyi bildirmenize ve bu nesne üzerinde bir özellik ayarlamanıza olanak tanır. İlk örnek, işaretlemedeki tek bir öğe olsa da, burada bir XAML işlemcisinin bu işaretlemeyi nasıl ayrıştırdığını gösteren ayrık adımlar vardır.

İlk olarak, object öğesinin varlığı yeni bir objectName nesnesinin örneği oluşturulmalıdır. Yalnızca böyle bir örnek mevcut olduktan sonra propertyName özelliği ayarlanabilir.

XAML'nin bir diğer kuralı, bir öğenin özniteliklerinin herhangi bir sırada ayarlanabilmesi gerektiğidir. Örneğin, <Rectangle Height="50" Width="100" /> ile <Rectangle Width="100" Height="50" /> arasında bir fark yoktur. Hangi sırayı kullandığınız bir stil meselesidir.

Uyarı

XML düzenleyicisi dışında tasarım yüzeyleri kullanıyorsanız XAML tasarımcıları genellikle sıralama kurallarını yükseltebilir, ancak öznitelikleri yeniden sıralamak veya yenilerini tanıtmak için bu XAML'yi daha sonra serbestçe düzenleyebilirsiniz.

Ekli özellikler

XAML, ekli özellik olarak bilinen bir söz dizimi öğesi ekleyerek XML'i genişletir. Özellik öğesi söz dizimine benzer şekilde, eklenen özellik söz dizimi bir nokta içerir ve nokta XAML ayrıştırma için özel bir anlam içerir. Özellikle, nokta ekli özelliğin sağlayıcısını ve özellik adını ayırır.

XAML'de AttachedPropertyProvider söz dizimini kullanarak ekli özellikleri ayarlarsınız. PropertyName XAML'de Canvas.Left ekli özelliğini nasıl ayarlayabileceğinize ilişkin bir örnek aşağıda verilmiştir:

<Canvas>
  <Button Canvas.Left="50">Hello</Button>
</Canvas>

Yedekleme türünde bu adın özelliğine sahip olmayan öğelerde ekli özelliği ayarlayabilirsiniz ve bu şekilde genel bir özellik veya xml:space özniteliği gibi farklı bir XML ad alanı tarafından tanımlanan bir öznitelik gibi çalışırlar.

Windows Çalışma Zamanı XAML'de şu senaryoları destekleyen ekli özellikler görürsünüz:

Daha fazla bilgi için bkz . Ekli özelliklere genel bakış.

Sabit "{" değerleri

Açılış ayracı simgesi { işaretleme uzantısı dizisinin başlangıcı olduğundan, "{" ile başlayan bir sabit dize değeri belirtmek için bir kaçış dizisi kullanırsınız. Kaçış dizisi "{}"dir. Örneğin, tek bir açılış ayracı olan bir dize değeri belirtmek için öznitelik değerini "{}{" olarak belirtin. Dize olarak "{" değeri sağlamak için alternatif tırnak işaretlerini de (örneğin, "" ile sınırlandırılmış bir öznitelik değeri içinde ' kullanabilirsiniz.

Uyarı

"\}", tırnak içindeyse de çalışır.  

Numaralandırma değerleri

Windows Çalışma Zamanı API'sindeki birçok özellik, numaralandırmaları değer olarak kullanır. Üye bir okuma-yazma özelliğiyse, öznitelik değeri sağlayarak bu tür bir özelliği ayarlayabilirsiniz. Özelliğin değeri olarak hangi numaralandırma değerini kullanacağınızı, sabitin adının nitelenmemiş halini kullanarak belirlersiniz. Örneğin, XAML'de UIElement.Visibility'yi şu şekilde ayarlayabilirsiniz: <Button Visibility="Visible"/>. Burada "Görünür" dizesi, Görünürlük sabit listesinin Görünür adlandırılmış sabitine doğrudan eşleştirilir.

  • Uygun bir form kullanmayın, çalışmaz. Örneğin, bu geçersiz XAML: <Button Visibility="Visibility.Visible"/>.
  • Sabitin değerini kullanmayın. Başka bir deyişle, numaralandırmanın nasıl tanımlandığına bağlı olarak, orada bulunan numaralandırmanın tamsayı değerine açık veya örtük olarak güvenmeyin. İşe yaramış gibi görünse de, geçici bir uygulama ayrıntısı olabileceği için XAML'de veya kodda kötü bir uygulamadır. Örneğin, şunu yapmayın: <Button Visibility="1"/>.

Uyarı

XAML kullanan ve numaralandırmaları kullanan API'lerin başvuru konularında, Söz Dizimi'ninÖzellik değeri bölümündeki numaralandırma türünün bağlantısına tıklayın. Bu bağlantı, belirtilen sabitler için adlandırılmış sabitleri keşfedebileceğiniz numaralandırma sayfasına bağlanır.

Numaralandırmalar bayrak yönünde olabilir, yani FlagsAttribute ile ilişkilendirilirler. XAML öznitelik değeri olarak bayrak düzeyinde numaralandırma için değerlerin bir bileşimini belirtmeniz gerekiyorsa, her bir sabit listesi sabitinin adını, her ad arasında virgülle (,) kullanın ve aralıklı boşluk karakteri kullanmayın. Bayrak düzeyinde öznitelikler Windows Çalışma Zamanı XAML sözlüğünde yaygın değildir, ancak ManipulationModes , XAML'de bayrak yönünde numaralandırma değeri ayarlamanın desteklendiği bir örnektir.

XAML'deki arabirimler

Nadir durumlarda, bir özelliğin türünün bir arabirim olduğu bir XAML söz dizimi görürsünüz. XAML türü sisteminde, bu arabirimi uygulayan bir tür ayrıştırıldığında değer olarak kabul edilebilir. Değer olarak hizmet vermek için bu tür bir türün oluşturulmuş bir örneği olmalıdır. XAML söz diziminde ButtonBase öğesinin Command ve CommandParameter özellikleri için tür olarak kullanılan bir arabirimi görürsünüz. Bu özellikler Model-View-ViewModel (MVVM) tasarım desenlerini destekler; burada ICommand arabirimi, görünümlerin ve modellerin nasıl etkileşime geçtiğine ilişkin sözleşmedir.

Windows Çalışma Zamanı dokümantasyonunda XAML yer tutucu kuralları

XAML kullanabilen Windows Çalışma Zamanı API'lerine yönelik başvuru konularının Söz Dizimi bölümünden herhangi birini incelediyseniz, söz diziminin birkaç yer tutucu içerdiğini görmüş olabilirsiniz. XAML söz dizimi bir kullanım söz dizimi olduğundan XAML söz dizimi C#, Microsoft Visual Basic veya Visual C++ bileşen uzantılarından (C++/CX) farklıdır. Kendi XAML dosyalarınızda son kullanımınızı ima eder, ancak kullanabileceğiniz değerler hakkında fazla açıklayıcı olmadan. Bu nedenle genellikle kullanım değişmez değerleri ve yer tutucuları bir araya getiren bir dil bilgisi türünü açıklar ve XAML Değerleri bölümündeki bazı yer tutucuları tanımlar.

Bir özelliğin XAML söz diziminde tür adları / öğe adları gördüğünüzde, gösterilen ad özelliği ilk tanımlayan türe yöneliktir. Ancak Windows Çalışma Zamanı XAML , DependencyObject tabanlı sınıflar için bir sınıf devralma modelini destekler. Bu nedenle, genellikle bir sınıftaki özniteliği, doğrudan tanımlandığı sınıf yerine, bu özelliği/özniteliği ilk tanımlayan sınıftan türetilmiş bir sınıfta kullanabilirsiniz. Örneğin, derin devralma kullanarak uiElement türetilmiş herhangi bir sınıfta Görünürlük özelliğini öznitelik olarak ayarlayabilirsiniz. Örneğin: <Button Visibility="Visible" />. Bu nedenle, herhangi bir XAML kullanım söz diziminde gösterilen öğe adını fazla kelimenin tam anlamıyla almayın; söz dizimi, bu sınıfı temsil eden öğeler ve türetilmiş bir sınıfı temsil eden öğeler için uygun olabilir. Tanımlayıcı öğe olarak gösterilen türün gerçek dünya kullanımında olması nadir veya imkansız olduğu durumlarda, söz diziminde bu tür adı kasıtlı olarak küçük harfe dönüştürülür. Örneğin, UIElement.Visibility için gördüğünüz söz dizimi şöyledir:

<uiElement Visibility="Visible"/>
-or-
<uiElement Visibility="Collapsed"/>

Birçok XAML söz dizimi bölümü, "Kullanım" içinde yer tutucular içerir ve bu yer tutucular doğrudan Söz Dizimi bölümünün altında yer alan bir XAML Değerleri bölümünde tanımlanır.

XAML kullanım bölümleri ayrıca çeşitli genelleştirilmiş yer tutucular kullanır. Bu yer tutucular XAML Değerlerinde her seferinde yeniden tanımlanmamıştır, çünkü bunların neyi temsil ettiklerini tahmin eder veya sonunda öğrenirsiniz. Okuyucuların çoğunun bunları XAML Değerlerinde tekrar tekrar görmekten bıkacağını ve bu nedenle tanımların dışında bırakacağımızı düşünüyoruz. Referans olarak, bu yer tutuculardan bazılarının listesi ve genel anlamda ne anlama geldikleri şöyledir:

  • object: Teorik olarak herhangi bir nesne değeridir, ancak genellikle dize veya nesne seçimi gibi belirli nesne türleriyle sınırlıdır ve daha fazla bilgi için başvuru sayfasındaki Açıklamalar'ı denetlemeniz gerekir.
  • objectözelliği: objectözelliği kombinasyonu, gösterilen söz diziminin birçok özellik için öznitelik değeri olarak kullanılabilecek bir türü ifade ettiği durumlarda kullanılır. Örneğin, Brush için gösterilen Xaml Özniteliği Kullanımı şunları içerir: <objectproperty="predefinedColorName"/>
  • eventhandler: Bu, bir olay özniteliği için gösterilen her XAML söz diziminin öznitelik değeri olarak görünür. Burada sağladığınız şey, bir olay işleyicisi işlevinin işlev adıdır. Bu işlev, XAML sayfası için arka planda kod içinde tanımlanmalıdır. Programlama düzeyinde bu işlev, işlemekte olduğunuz olayın temsilci imzası ile eşleşmelidir, aksi durumda uygulama kodunuz derlenmez. Ancak bu, XAML ile ilgili değil, programlama açısından dikkat edilmesi gereken bir konudur, bu nedenle XAML söz dizimindeki temsilci türü hakkında hiçbir şey ima etmeye çalışmayız. Bir olay için hangi temsilciyi uygulamanız gerektiğini bilmek istiyorsanız, bu, olayın başvuru konusunun Olay bilgileri bölümünde, Temsilci etiketli bir tablo satırında yer alır.
  • enumMemberName: Tüm numaralandırmalar için öznitelik söz diziminde gösterilir. Numaralandırma değeri kullanan özellikler için benzer bir yer tutucu vardır, ancak genellikle yer tutucuya sabit listesi adının ipucunu ekler. Örneğin, FrameworkElement.FlowDirection için gösterilen söz dizimi <FlowDirection="flowDirectionMemberName"/ şeklindedir>. Bu özellik başvuru sayfalarından birindeyseniz, Tür: metninin yanındaki Özellik Değeri bölümünde görüntülenen numaralandırma türünün bağlantısına tıklayın. Bu numaralandırmayı kullanan bir özelliğin öznitelik değeri için, Üyeler listesinin Üye sütununda listelenen herhangi bir dizeyi kullanabilirsiniz.
  • double, int, string, bool: Bunlar XAML dili tarafından bilinen ilkel türlerdir. C# veya Visual Basic kullanarak programlama gerçekleştiriyorsanız, bu türler Double, Int32, String ve Boole gibi Microsoft .NET eşdeğer türlerine yansıtılır ve arka planda XAML tanımlı değerlerinizle çalışırken bu .NET türlerindeki üyeleri kullanabilirsiniz. C++/CX kullanarak programlama kullanıyorsanız, C++ temel türlerini kullanırsınız, ancak bunları Platform ad alanı tarafından tanımlanan türlere eşdeğer olarak da düşünebilirsiniz, örneğin Platform::String. Bazı durumlarda belirli özellikler için ek değer kısıtlamaları olacaktır. Ancak bu tür kısıtlamalar hem kod kullanımları hem de XAML kullanımları için geçerli olduğundan, bunları genellikle XAML bölümünde değil Özellik değeri bölümünde veya Açıklamalar bölümünde görürsünüz.

İpuçları ve püf noktaları, stille ilgili notlar

  • Genel olarak işaretleme uzantıları, ana XAML'ye genel bakış bölümünde açıklanmıştır. Ancak bu konuda verilen yönergeleri en çok etkileyen işaretleme uzantısı StaticResource işaretleme uzantısıdır (ve ilgili ThemeResource). StaticResource işaretleme uzantısının işlevi, XAML'nizi bir XAML ResourceDictionary'den gelen yeniden kullanılabilir kaynaklara dönüştürmeyi etkinleştirmektir. Bir ResourceDictionary'de neredeyse her zaman denetim şablonları ve ilgili stiller tanımlarsınız. Denetim şablonu tanımının veya uygulamaya özgü stilin daha küçük bölümlerini genellikle ResourceDictionary'de de tanımlarsınız; örneğin uygulamanızın kullanıcı arabiriminin farklı bölümleri için birden çok kez kullandığı bir renk için SolidColorBrush . StaticResource kullanılarak, aksi takdirde ayarlanacak özellik öğesi kullanımını gerektirecek tüm özellikler artık öznitelik söz diziminde ayarlanabilir. Ancak XAML'yi yeniden kullanmak için XAML'yi hesaba katma avantajları, sayfa düzeyinde söz dizimini basitleştirmenin ötesine geçer. Daha fazla bilgi için bkz . ResourceDictionary ve XAML kaynak başvuruları.
  • XAML örneklerinde boşluk ve çizgi akışlarının nasıl uygulandığına ilişkin birkaç farklı kural göreceksiniz. Özellikle, çok sayıda farklı özniteliği ayarlanmış nesne öğelerini ayırmaya yönelik farklı kurallar vardır. Bu sadece stil meselesi. Visual Studio XML düzenleyicisi, XAML'yi düzenlerken bazı varsayılan stil kuralları uygular, ancak bunları ayarlarda değiştirebilirsiniz. Bir XAML dosyasındaki boşluğun önemli olarak kabul edildiği az sayıda durum vardır; daha fazla bilgi için bkz . XAML ve boşluk.