**XAML** (IPA /ˈzæməl/), (**Extensible Application Markup Language**) genişletilebilir uygulama biçimlendirme dili. Microsoft'un uygulama arayüzlerinin oluşturulmasını sağlayan tanımlama dili. XAML, geliştiricilerin XML kullanarak tüm .NET kullanıcı arayüz elemanlarının (button, textbox … gibi) çizimlerini (İngilizce: *layout*) kontrol edebilmelerini sağlar. Her XAML etiketi (tag), özellikleri XML attributeleriyle kontrol edilen bir .NET Framework sınıfına birebir karşılık gelir.

Örneğin <Button> elemanını ele alalım. <Button> tag’i doğrudan System.Windows.Controls.Button sınıfına karşılık gelir. Read-only olan özellikler (Properties) XAML tarafından erişilemez; sadece public, get ve set methodları olan özellikler XAML ile erişilerbilirdir. Event’ler ve handler'ler de XAML attributeleri ile belirtilebilir ve event’in gerçekleşmesi sonucu çalışacak kod da code behind tarafına C# ya da tercihe göre VB.NET ile yazılabilir. Nasıl ki ASP.NET’te kodu ister codebehind sayfasına ya da aspx sayfasına yazılıyorsa burada da codebehind ya da XAML dosyasına yazılabilir.

XAML sayfasına kodu gömülürse, çalıştırmak için önce uygulama derlenmeli. Fakat XAML sayfasına kod yazılmadıysa XAML dosyasına çift tıklayarak Vista üzerinde HTML'de olduğu gibi doğrudan görülebilir.

Windows XP’de ise sonucu görebilmek ya da tarayıcıya yükleyebilmek için XAML sayfalarının önce derlenmesi gerekir.

XAML ağaç modeli
----------------

Nasıl ki HTML nesneleri DOM ağaçını oluşturmak için pars edilirse, XAML elemanları da `ElementTree` ağacını oluşturmak için de pars edilir.

XAML’ın nesneye dayalı methodolojiye dayandığını söylenebilir. Bir XAML elemanından türetilen başka bir eleman ebeveyninin özelliklerini alır. XAML’dan tam anlamıyla faydalanabilmek için kalıtımın doğasını anlaşılmalıdır. Custom controller, alt sınıflar oluşturularak kullanıcı arayüzü tasarımında kullanılmak üzere XAML geliştiricilerine sunulabilir.

XAML, WPF tarafında tanımlanan nesnelerin XML görünümü olduğu için, XAML elemenları nesne-tabanlı programlama tekniklerini kullanan geliştiriciler tarafından genişletilebilir.

XAML, bir programlama dili değildir. Uygulamaları çalıştırmak için tasarlanmamıştır. XAML dosyaları uygulamalar için kullanıcı arayüz tanımları içerir. Uygulama mantığı ve event handler’ler, codebehind sayfalarında bulunur.

Uygulama ve sayfa tanımı
------------------------

Uygulama tanımı (İngilizce: *application definition*) kendi dosyası içinde tanımlanır. Ayarlanması gereken iki özelliği vardır: aduzay (İngilizce: *namespace*) ve başlama URİ'si (İngilizce: *startup URI*). URI, uygulama çalıştığında yüklenmesi gereken ilk sayfayı belirtir. 
XAML eleman tanımında ya her eleman için bir aduzaya ya da Avalon aduzayının kök elemanına referans verilmelidir.

Kökün tanımı
------------

Herhangi bir XAML dosyasında tanımlanan ilk eleman kök (İngilizce: *root*) elemanıdır. Kök elemanı mutlaka tanımlandığı aduzay referansını içermelidir. Kök elemanlar, diğer XAML elemanları içeren konteynerlerdır. Uygulama tanımı için en yaygın kök (root) eleman `NavigationWindow`’dur. `Window` elemanıysa oldukça az kullanılmaktadır.

Sayfa tanımı (İngilizce: *page definition*) için en yaygın kök eleman `Panel` ve onun alt sınıfı olan `DockPanel` ve `StackPanel` elemanları ve de `Page` elemanıdır.

İki çeşit XAML uygulaması vardır: doğrudan çalışan (İngilizce: *express*) ve yerleştirilmiş (İngilizce: *installed*) uygulama. Doğrudan çalışan uygulama bir Web tarayıcısında koşar. Yerleştirilmiş uygulamalarsa bilinen geleneksel masaüstü uygulamalarıdır.

Tüm XAML özellikleri (İngilizce: *attribute*) kod tarafında düzenlenebilir. Zaten bu özellikler, CLR sınıf özelliklerinin XML görünümleridir. Başka bir ifâdeyle geleneksel Windows uygulamalarında olduğu gibi bir düğmenin (İngilizce: *button*) arka plan rengini, yüksekliğini ya da posizyonunu kod içinden de kolayca değiştirmeyi sağlar.

XAML dosyalarında da <`x:Code`> elemanını belirterek kod barındırılabilir. Yalnız tüm kod <CDATA[...]]> elemanı (tag) içine yazılmalıdır. <CDATA[...]]> elemanı, derleyici bu eleman içindeki kod satırlarını yorumlamasını engeller.

Örnek
-----

```
<x:Code>
 <![CDATA 
 void ButtonClickedHandler(object sender, RoutedEventArgs eventArgs)
 {
 MyButton.Width = 100 ;
 MyButton.Content = "Thank you! ";
 }
 ]]> 
</x:Code>

```

Dış bağlantılar
---------------

* MSDN : XAML'e Genel Bakış 14 Kasım 2012 tarihinde Wayback Machine sitesinde arşivlendi.
* Ahmet Çığşar : XAML ile Tanışmak ve XAML Yapısı 2 Mart 2013 tarihinde Wayback Machine sitesinde arşivlendi.
* csharpnedir.com : XAML'ı Anlamak 22 Ocak 2013 tarihinde Wayback Machine sitesinde arşivlendi.