Bölüm 1. XAML Kullanmaya Başlarken
Bir Xamarin.Forms uygulamada, XAML çoğunlukla bir sayfanın görsel içeriğini tanımlamak için kullanılır ve C# arka planda kod dosyasıyla birlikte çalışır.
Arka planda kod dosyası, işaretleme için kod desteği sağlar. Bu iki dosya birlikte alt görünümleri ve özellik başlatmayı içeren yeni bir sınıf tanımına katkıda bulunur. XAML dosyasında sınıflara ve özelliklere XML öğeleri ve öznitelikleri ile başvurulur ve işaretleme ile kod arasındaki bağlantılar oluşturulur.
Çözüm Oluşturma
İlk XAML dosyanızı düzenlemeye başlamak için Visual Studio veya Mac için Visual Studio kullanarak yeni Xamarin.Forms bir çözüm oluşturun. (Ortamınıza karşılık gelen aşağıdaki sekmeyi seçin.)
Windows'ta Visual Studio 2019'u başlatın ve başlangıç penceresinde Yeni proje oluştur'a tıklayarak yeni bir proje oluşturun:
Yeni proje oluştur penceresinde Proje türü açılan listesinde Mobil'i seçin, Mobil Uygulama (Xamarin.Forms) şablonunu seçin ve İleri düğmesine tıklayın:
Yeni projenizi yapılandırın penceresinde Proje adını XamlSamples (veya tercihinize bağlı olarak) olarak ayarlayın ve Oluştur düğmesine tıklayın.
Yeni Platformlar Arası Uygulama iletişim kutusunda Boş'a ve ardından Tamam düğmesine tıklayın:
Çözümde dört proje oluşturulur: XamlSamples .NET Standard kitaplığı, XamlSamples.Android, XamlSamples.iOS ve Evrensel Windows Platformu çözümü XamlSamples.UWP.
XamlSamples çözümünü oluşturduktan sonra, çözüm başlangıç projesi olarak çeşitli platform projelerini seçerek ve proje şablonu tarafından oluşturulan basit uygulamayı telefon öykünücülerine veya gerçek cihazlara oluşturup dağıtarak geliştirme ortamınızı test etmek isteyebilirsiniz.
Platforma özgü kod yazmanız gerekmediği sürece, paylaşılan XamlSamples .NET Standart kitaplık projesi neredeyse tüm programlama zamanınızı harcayabileceğiniz yerdir. Bu makaleler bu projenin dışına çıkmayacaktır.
XAML Dosyasının Anatomisi
XamlSamples .NET Standard kitaplığında aşağıdaki adlara sahip bir dosya çifti bulunur:
- App.xaml, XAML dosyası ve
- App.xaml.cs, XAML dosyasıyla ilişkilendirilmiş bir C# arka planda kod dosyası.
Arka planda kod dosyasını görmek için App.xaml öğesinin yanındaki oka tıklamanız gerekir.
Hem App.xaml hem de App.xaml.cs öğesinden Application
türetilen adlı App
bir sınıfa katkıda bulunur. XAML dosyalarına sahip diğer sınıfların çoğu, öğesinden ContentPage
türetilen bir sınıfa katkıda bulunur; bu dosyalar sayfanın tamamının görsel içeriğini tanımlamak için XAML kullanır. Bu, XamlSamples projesindeki diğer iki dosya için geçerlidir:
- MainPage.xaml, XAML dosyası ve
- MainPage.xaml.cs, C# arka planda kod dosyası.
MainPage.xaml dosyası şöyle görünür (biçimlendirme biraz farklı olsa da):
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamlSamples"
x:Class="XamlSamples.MainPage">
<StackLayout>
<!-- Place new controls here -->
<Label Text="Welcome to Xamarin Forms!"
VerticalOptions="Center"
HorizontalOptions="Center" />
</StackLayout>
</ContentPage>
İki XML ad alanı (xmlns
) bildirimi, ilki Xamarin'in web sitesinde, ikincisi de Microsoft'un web sitesinde görünen URI'lere başvurur. Bu URI'lerin neyi işaret ediyor olduğunu kontrol etmeye zahmet etmeyin. Orada hiçbir şey yok. Bunlar yalnızca Xamarin ve Microsoft'a ait URI'lerdir ve temelde sürüm tanımlayıcıları olarak işlev görürler.
İlk XML ad alanı bildirimi, XAML dosyasında ön ek olmadan tanımlanan etiketlerin içindeki sınıflara Xamarin.Formsbaşvurması anlamına gelir. Örneğin ContentPage
. İkinci ad alanı bildirimi, ön ekini x
tanımlar. Bu, XAML'nin kendisine ait olan ve diğer XAML uygulamaları tarafından desteklenen birkaç öğe ve öznitelik için kullanılır. Ancak, bu öğeler ve öznitelikler URI'ye eklenen yıla bağlı olarak biraz farklıdır. Xamarin.Forms 2009 XAML belirtimini destekler, ancak tümünü desteklemez.
Ad local
alanı bildirimi, .NET Standart kitaplık projesinden diğer sınıflara erişmenizi sağlar.
İlk etiketin sonunda, x
ön ek adlı Class
bir öznitelik için kullanılır. Bu x
ön ekin kullanımı XAML ad alanı için neredeyse evrensel olduğundan, gibi Class
XAML öznitelikleri neredeyse her zaman olarak x:Class
adlandırılır.
x:Class
özniteliği tam bir .NET sınıf adı belirtir: MainPage
ad alanında XamlSamples
sınıfı. Bu, bu XAML dosyasının, özniteliğin XamlSamples
görüntülendiği etiketten ContentPage
türetilen ad alanında adlı MainPage
yeni bir sınıf tanımladığı x:Class
anlamına gelir.
x:Class
özniteliği yalnızca türetilmiş bir C# sınıfı tanımlamak için bir XAML dosyasının kök öğesinde görünebilir. Bu, XAML dosyasında tanımlanan tek yeni sınıftır. XAML dosyasında görünen diğer her şey bunun yerine yalnızca mevcut sınıflardan örneği oluşturulur ve başlatılır.
MainPage.xaml.cs dosyası şöyle görünür (kullanılmayan using
yönergelerin dışında):
using Xamarin.Forms;
namespace XamlSamples
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
}
}
sınıfı MainPage
öğesinden ContentPage
türetilir, ancak sınıf tanımına partial
dikkat edin. Bu, için MainPage
başka bir kısmi sınıf tanımı olması gerektiğini gösterir, ancak nerededir? Peki bu InitializeComponent
yöntem nedir?
Visual Studio projeyi derlediğinde XAML dosyasını ayrıştırarak bir C# kod dosyası oluşturur. XamlSamples\XamlSamples\obj\Debug dizinine bakarsanız, XamlSamples.MainPage.xaml.g.cs adlı bir dosya bulursunuz. 'g' oluşturuldu anlamına gelir. Bu, oluşturucudan MainPage
çağrılan yöntemin InitializeComponent
tanımını içeren diğer kısmi sınıf tanımıdırMainPage
. Bu iki kısmi MainPage
sınıf tanımı birlikte derlenebilir. XAML'nin derlenip derlenmediğine bağlı olarak, XAML dosyası veya XAML dosyasının ikili biçimi yürütülebilir dosyaya eklenir.
Çalışma zamanında, belirli bir platform projesindeki kod bir LoadApplication
yöntemi çağırır ve bu yönteme .NET Standard kitaplığındaki sınıfın App
yeni bir örneğini geçirir. App
Sınıf oluşturucu örneği oluştururMainPage
. Bu sınıfın oluşturucusunun çağrısı InitializeComponent
, daha sonra .NET Standard kitaplığından XAML dosyasını (veya derlenmiş ikili dosyasını) ayıklayan yöntemini çağırır LoadFromXaml
. LoadFromXaml
XAML dosyasında tanımlanan tüm nesneleri başlatır, hepsini üst-alt ilişkilerde birbirine bağlar, kodda tanımlanan olay işleyicilerini XAML dosyasında ayarlanan olaylara ekler ve nesnelerin sonuç ağacını sayfanın içeriği olarak ayarlar.
Normalde oluşturulan kod dosyalarıyla çok fazla zaman harcamanıza gerek olmasa da, bazen oluşturulan dosyalardaki kodda çalışma zamanı özel durumları oluşturulur, bu nedenle bunları bilmeniz gerekir.
Bu programı derleyip çalıştırdığınızda, Label
öğe XAML'nin önerdiği gibi sayfanın ortasında görünür:
Daha ilginç görseller için tek ihtiyacınız olan daha ilginç XAML'dir.
Yeni XAML Sayfaları Ekleme
Projenize başka XAML tabanlı ContentPage
sınıflar eklemek için XamlSamples .NET Standart kitaplık projesini seçin, sağ tıklayın ve Yeni Öğe Ekle...'yi > seçin. Yeni Öğe Ekle iletişim kutusunda Visual C# Öğeleri >Xamarin.Forms> İçerik Sayfası'nı (yalnızca kod içeren bir sayfa oluşturan İçerik Sayfası (C#) veya sayfa olmayan İçerik Görünümü'nü seçin. Sayfaya helloxamlpage gibi bir ad verin:
Projeye HelloXamlPage.xaml ve arka planda kod dosyası HelloXamlPage.xaml.cs olmak üzere iki dosya eklenir.
Sayfa İçeriğini Ayarlama
HelloXamlPage.xaml dosyasını, yalnızca ve ContentPage.Content
etiketleri ContentPage
olacak şekilde düzenleyin:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XamlSamples.HelloXamlPage">
<ContentPage.Content>
</ContentPage.Content>
</ContentPage>
Etiketler, ContentPage.Content
XAML'nin benzersiz söz diziminin bir parçasıdır. İlk başta, geçersiz XML gibi görünebilirler, ancak yasaldırlar. Nokta, XML'de özel bir karakter değildir.
Etiketlere ContentPage.Content
özellik öğesi etiketleri adı verilir. Content
ContentPage
özelliğidir ve genellikle tek bir görünüme veya alt görünümlere sahip bir düzene ayarlanır. Normalde özellikler XAML'de öznitelik haline gelir, ancak karmaşık bir Content
nesneye öznitelik ayarlamak zor olabilir. Bu nedenle özellik, sınıf adından ve özellik adından oluşan bir XML öğesi olarak noktayla ayrılmış olarak ifade edilir. Content
Artık özelliği etiketler arasında ContentPage.Content
şu şekilde ayarlanabilir:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XamlSamples.HelloXamlPage"
Title="Hello XAML Page">
<ContentPage.Content>
<Label Text="Hello, XAML!"
VerticalOptions="Center"
HorizontalTextAlignment="Center"
Rotation="-15"
IsVisible="true"
FontSize="Large"
FontAttributes="Bold"
TextColor="Blue" />
</ContentPage.Content>
</ContentPage>
Kök etiketinde bir Title
özniteliğin ayarlandığına da dikkat edin.
Şu anda sınıflar, özellikler ve XML arasındaki ilişki belirgin olmalıdır: Xamarin.Forms XAML dosyasında xml öğesi olarak bir sınıf (veya Label
gibiContentPage
) görünür. Bu sınıfın özellikleri (on ContentPage
ve yedi özelliği Label
dahil) Title
genellikle XML öznitelikleri olarak görünür.
Bu özelliklerin değerlerini ayarlamak için birçok kısayol vardır. Bazı özellikler temel veri türleridir: Örneğin, Title
ve özellikleri türündedir Rotation
String
Double
ve IsVisible
(true
varsayılan olarak ve yalnızca çizim için burada ayarlanır) türündedirBoolean
.Text
HorizontalTextAlignment
özelliği, sabit listesi olan türündedirTextAlignment
. Herhangi bir numaralandırma türünün özelliği için sağlamanız gereken tek şey üye adıdır.
Ancak daha karmaşık türlerin özellikleri için XAML ayrıştırma için dönüştürücüler kullanılır. Bunlar, içindeki Xamarin.Forms sınıfından TypeConverter
türetilen sınıflardır. Çoğu genel sınıftır, ancak bazıları değildir. Bu belirli XAML dosyası için bu sınıflardan birkaçı arka planda rol oynar:
LayoutOptionsConverter
VerticalOptions
özelliği içinFontSizeConverter
FontSize
özelliği içinColorTypeConverter
TextColor
özelliği için
Bu dönüştürücüler özellik ayarlarının izin verilebilen söz dizimini yönetir.
virgülle ThicknessTypeConverter
ayrılmış bir, iki veya dört sayıyı işleyebilir. Bir sayı sağlanırsa, dört taraf için de geçerlidir. İki sayı ile ilki sol ve sağ doldurma, ikincisi ise üst ve alttır. Dört sayı sol, üst, sağ ve alt sıradadır.
, LayoutOptionsConverter
yapının genel statik alanlarının LayoutOptions
adlarını türündeki LayoutOptions
değerlere dönüştürebilir.
bir FontSizeConverter
üyeyi veya sayısal yazı tipi boyutunu işleyebilir NamedSize
.
, ColorTypeConverter
bir sayı işareti (#) ile veya alfa kanalı olmadan yapının genel statik alanlarının Color
veya onaltılık RGB değerlerinin adlarını kabul eder. Alfa kanalı olmayan söz dizimi aşağıdadır:
TextColor="#rrggbb"
Küçük harflerin her biri onaltılık bir rakamdır. Alfa kanalının nasıl dahil olduğu aşağıda verilmiştir:
TextColor="#aarrggbb">
Alfa kanalı için FF'nin tamamen opak ve 00'in tamamen saydam olduğunu unutmayın.
Diğer iki biçim, her kanal için yalnızca tek bir onaltılık basamak belirtmenize olanak sağlar:
TextColor="#rgb"
TextColor="#argb"
Bu gibi durumlarda, basamak değeri oluşturmak için yinelenir. Örneğin, CC-FF-33 RGB rengi #CF3.
Sayfa Gezintisi
XamlSamples programını çalıştırdığınızdaMainPage
, görüntülenir. Yeniyi HelloXamlPage
görmek için bunu App.xaml.cs dosyasındaki yeni başlangıç sayfası olarak ayarlayabilir veya uygulamasından MainPage
yeni sayfaya gidebilirsiniz.
Gezintiyi uygulamak için önce App.xaml.cs oluşturucusunda bir NavigationPage
nesne oluşturulacak şekilde kodu değiştirin:
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());
}
MainPage.xaml.cs oluşturucusunda basit Button
bir oluşturabilir ve olay işleyicisini kullanarak adresine gidebilirsinizHelloXamlPage
:
public MainPage()
{
InitializeComponent();
Button button = new Button
{
Text = "Navigate!",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center
};
button.Clicked += async (sender, args) =>
{
await Navigation.PushAsync(new HelloXamlPage());
};
Content = button;
}
Content
Sayfanın özelliğinin ayarlanması, XAML dosyasındaki özelliğin Content
ayarının yerini alır. Bu programın yeni sürümünü derleyip dağıttığınızda, ekranda bir düğme görüntülenir. Tuşuna basıldığında adresine HelloXamlPage
gider. i Telefon, Android ve UWP'de sonuç sayfası aşağıdadır:
iOS'ta Geri düğmesini kullanarak<, Android'de sayfanın üst kısmındaki veya telefonun altındaki sol oku kullanarak veya Windows 10'da sayfanın üst kısmındaki sol oku kullanarak geri MainPage
gidebilirsiniz.
işlemenin farklı yolları için XAML ile denemeler yapmaktan Label
çekinmeyin. Metne Unicode karakterleri eklemeniz gerekiyorsa, standart XML söz dizimini kullanabilirsiniz. Örneğin, karşılamayı akıllı tırnak içine almak için şunu kullanın:
<Label Text="“Hello, XAML!”" … />
Şöyle görünür:
XAML ve Kod Etkileşimleri
HelloXamlPage örneği sayfada yalnızca bir tane Label
içerir, ancak bu çok olağan dışıdır. Çoğu ContentPage
türev, özelliğini gibi StackLayout
bir düzende ayarlarContent
. Children
öğesinin StackLayout
özelliği türünde IList<View>
olacak şekilde tanımlanır, ancak aslında türünde ElementCollection<View>
bir nesnedir ve bu koleksiyon birden çok görünüm veya diğer düzenlerle doldurulabilir. XAML'de bu üst-alt ilişkiler normal XML hiyerarşisiyle oluşturulur. XamlPlusCodePage adlı yeni bir sayfa için bir XAML dosyası aşağıda verilmiştir:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XamlSamples.XamlPlusCodePage"
Title="XAML + Code Page">
<StackLayout>
<Slider VerticalOptions="CenterAndExpand" />
<Label Text="A simple Label"
Font="Large"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Button Text="Click Me!"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage>
Bu XAML dosyası bozulmadan tamamlanır ve şöyle görünür:
Ancak, bu programın işlevsel olarak yetersiz olduğunu düşünebilirsiniz. Slider
geçerli değeri Button
görüntülemesine Label
neden olması ve büyük olasılıkla program içinde bir şey yapması amaçlanmıştır.
Bölüm 4'te göreceğiniz gibi. Veri Bağlama Temelleri, kullanarak Label
bir Slider
değer görüntüleme işi, veri bağlama ile tamamen XAML'de işlenebilir. Ancak önce kod çözümünü görmek yararlıdır. Yine de tıklamayı Button
işlemek için kesinlikle kod gerekir. Bu, için XamlPlusCodePage
arka planda kod dosyasının ve Clicked
olayının ValueChanged
Slider
işleyicilerini içermesi Button
gerektiği anlamına gelir. Şimdi bunları ekleyelim:
namespace XamlSamples
{
public partial class XamlPlusCodePage
{
public XamlPlusCodePage()
{
InitializeComponent();
}
void OnSliderValueChanged(object sender, ValueChangedEventArgs args)
{
}
void OnButtonClicked(object sender, EventArgs args)
{
}
}
}
Bu olay işleyicilerinin genel olması gerekmez.
XAML dosyasına geri döndüğünüzde ve Button
etiketlerinin Slider
şu işleyicilere başvuran ve Clicked
olayları için ValueChanged
öznitelikleri içermesi gerekir:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XamlSamples.XamlPlusCodePage"
Title="XAML + Code Page">
<StackLayout>
<Slider VerticalOptions="CenterAndExpand"
ValueChanged="OnSliderValueChanged" />
<Label Text="A simple Label"
Font="Large"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Button Text="Click Me!"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
Clicked="OnButtonClicked" />
</StackLayout>
</ContentPage>
Bir olaya işleyici atamanın, bir özelliğe değer atamayla aynı söz dizimine sahip olduğuna dikkat edin.
olayının ValueChanged
işleyicisi Slider
geçerli değeri görüntülemek için öğesini Label
kullanacaksa, işleyicinin koddan bu nesneye başvurması gerekir. Label
özniteliğiyle x:Name
belirtilen bir ad gerekir.
<Label x:Name="valueLabel"
Text="A simple Label"
Font="Large"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
x
özniteliğinin x:Name
ön eki, bu özniteliğin XAML'ye ait olduğunu gösterir.
Özniteliğine x:Name
atadığınız ad, C# değişken adları ile aynı kurallara sahiptir. Örneğin, bir harf veya alt çizgiyle başlamalı ve eklenmiş boşluk içermemelidir.
ValueChanged
Artık olay işleyicisi öğesini yeni Slider
değeri görüntüleyecek şekilde ayarlayabilirLabel
. Yeni değer, olay bağımsız değişkenlerinden kullanılabilir:
void OnSliderValueChanged(object sender, ValueChangedEventArgs args)
{
valueLabel.Text = args.NewValue.ToString("F3");
}
Öte yandan işleyici Slider
, bağımsız değişkenden sender
bu olayı oluşturan nesneyi alabilir ve özelliği şu öğeden alabilir Value
:
void OnSliderValueChanged(object sender, ValueChangedEventArgs args)
{
valueLabel.Text = ((Slider)sender).Value.ToString("F3");
}
Programı ilk kez çalıştırdığınızdaLabel
, olay henüz tetiklenmediğinden değeri ValueChanged
görüntülemezSlider
. Ancak herhangi bir düzenleme Slider
değerin görüntülenmesine neden olur:
Şimdi için Button
. Şimdi düğmeyle Text
bir uyarı görüntüleyerek bir Clicked
olaya yanıt simülasyonu yapalım. Olay işleyicisi bağımsız değişkenini sender
güvenli bir şekilde öğesine Button
dönüştürebilir ve ardından özelliklerine erişebilir:
async void OnButtonClicked(object sender, EventArgs args)
{
Button button = (Button)sender;
await DisplayAlert("Clicked!",
"The button labeled '" + button.Text + "' has been clicked",
"OK");
}
yöntemi zaman uyumsuz olduğundan olarak async
DisplayAlert
tanımlanır ve yöntemi tamamlandığında döndüren işleciyle await
önceden oluşturulmuş olması gerekir. Bu yöntem olayı bağımsız değişkenden sender
tetiklediğindenButton
, aynı işleyici birden çok düğme için kullanılabilir.
XAML'de tanımlanan bir nesnenin arka planda kod dosyasında işlenen bir olayı başlatabildiğini ve arka planda kod dosyasının özniteliğiyle x:Name
kendisine atanan adı kullanarak XAML'de tanımlanan bir nesneye erişebildiğini gördünüz. Bunlar, kod ve XAML'nin etkileşim kurmasının iki temel yoludır.
XAML'nin nasıl çalıştığına ilişkin bazı ek içgörüler, artık özel alan olarak herhangi x:Name
bir özniteliğe atanmış herhangi bir adı içeren yeni oluşturulan XamlPlusCode.xaml.g.cs dosyası incelenerek çözümlenebilir. Bu dosyanın basitleştirilmiş bir sürümü aşağıdadır:
public partial class XamlPlusCodePage : ContentPage {
private Label valueLabel;
private void InitializeComponent() {
this.LoadFromXaml(typeof(XamlPlusCodePage));
valueLabel = this.FindByName<Label>("valueLabel");
}
}
Bu alanın bildirimi, değişkenin yetki alanınız altındaki kısmi sınıf dosyası içinde XamlPlusCodePage
herhangi bir yerde serbestçe kullanılmasını sağlar. Çalışma zamanında, alan XAML ayrıştırıldıktan sonra atanır. Bu, valueLabel
alanın oluşturucunun XamlPlusCodePage
başladığı, ancak çağrıldıktan sonra InitializeComponent
geçerli null
olduğu anlamına gelir.
Denetimi oluşturucuya geri döndürdükten sonra InitializeComponent
, sayfanın görselleri sanki kodda örneklenmiş ve başlatılmış gibi oluşturuldu. XAML dosyası artık sınıfında herhangi bir rol oynamaz. Sayfadaki bu nesneleri, örneğin görünümüne görünüm StackLayout
ekleyerek veya sayfanın özelliğini tamamen başka bir şeye ayarlayarak Content
istediğiniz şekilde değiştirebilirsiniz. Sayfanın özelliğini ve düzen koleksiyonlarındaki öğeleri inceleyerek Content
"ağaçta Children
gezinebilirsiniz". Bu şekilde erişilen görünümlerde özellikleri ayarlayabilir veya bunlara dinamik olarak olay işleyicileri atayabilirsiniz.
Rahat olun. Bu sizin sayfanız ve XAML yalnızca içeriğini oluşturmaya yönelik bir araçtır.
Özet
Bu giriş ile bir XAML dosyasının ve kod dosyasının sınıf tanımına nasıl katkıda olduğunu ve XAML ile kod dosyalarının nasıl etkileşime geçtiğini gördünüz. Ancak XAML ayrıca çok esnek bir şekilde kullanılmasını sağlayan kendi benzersiz söz dizimsel özelliklerine sahiptir. Bunları 2. Bölümde keşfetmeye başlayabilirsiniz. Temel XAML Söz Dizimi.