TOC

This article is currently in the process of being translated into Serbian (~80% done).

XAML:

Basic XAML

U prethodnom poglavlju smo govorili o tome šta je XAML i za šta se koristi, ali kako kreirati grafički kontrolni element u XAML-u? Kao što ćemo videti u sledećem primeru, kreiranje grafičkog kontrolnog elementa u XAML-u nije ništa drugo do pisanje imena tog elementa u izlomljenim zagradama. Na primer, grafički kontrolni element dugme (eng. Button) izleda ovako:

<Button>

XAML tagovi moraju biti zatvoreni, bilo pisanjem zatvorenog taga ili kose crte na kraju otvorenog taga.

<Button></Button>

ili

<Button />

Većina grafičkih kontrolnih elemenata dozvoljava umetanje sadržaja između otvorenog i zatvorenog taga, što čini sadržaj kontrolnog elementa. Na primer, grafički kontrolni element dugme nam dozvoljava da između otvorenog i zatvorenog taga sami definišemo tekst koji se prikazuje na njemu.

<Button>A button</Button>

HTML nije osetljiv na promenu malih i velikih slova, ali XAML jeste, budući da ime grafičkog kontrolnog elementa mora da odgovara određenom tipu radnog okvira .NET. Ovo važi i za imena atributa, koja odgovaraju svojstvima kontrolnih elemenata. Uzmimo za primer dugme, čija ćemo svojstva definisati dodavanjem atributa u tag:

<Button FontWeight="Bold" Content="A button" />

Postavljamo FontWeight svojstvo,koje nam daje tekst koji je boldovan,a zatim postavljamo Content svojstvo,koje je isto kao pisanje teksta između pocetnog i krajnjeg taga.Međutim,svi atributi kontrole mogu takođe biti definisani ovako,gde se oni pojavljuju kao deca tagova(child tags) glavne kontrole,koristeci Control-Dot-Property notaciju.

<Button>
    <Button.FontWeight>Bold</Button.FontWeight>
    <Button.Content>A button</Button.Content>
</Button>

Rezultat je potpuno isti kao gore,dakle u ovom slucaju,radi se samo o sintaksi i nicemu drugom.Međutim dosta kontrola sadrzi sadrzaj drugaciji od teksta,na primer druge kontrole.Evo primera gde imamo tekst u razlicitim bojama na istom dugmetu koristeci nekoliko TextBlock kontrola unutar Button:

<Button>
    <Button.FontWeight>Bold</Button.FontWeight>
    <Button.Content>
        <WrapPanel>
            <TextBlock Foreground="Blue">Multi</TextBlock>
            <TextBlock Foreground="Red">Color</TextBlock>
            <TextBlock>Button</TextBlock>
        </WrapPanel>
    </Button.Content>
</Button>

The Content property only allows for a single child element, so we use a WrapPanel to contain the differently colored blocks of text. Panels, like the WrapPanel, plays an important role in WPF and we will discuss them in much more details later on - for now, just consider them as containers for other controls.

The exact same result can be accomplished with the following markup, which is simply another way of writing the same:

<Button FontWeight="Bold">
    <WrapPanel>
        <TextBlock Foreground="Blue">Multi</TextBlock>
        <TextBlock Foreground="Red">Color</TextBlock>
        <TextBlock>Button</TextBlock>
    </WrapPanel>
</Button>

Code vs. XAML

Nadamo se da gore navedeni primeri pokazuju kako je lako pisati u XAML,ali sa puno razlicitih nacina da uradimo to,i ako mislis da je gore naveden primer mnogo uređivanja da bi dobili dugme sa tekstom u razlicitim bojama,onda pokusajte uporediti to isto samo sada napisano u C#.

Button btn = new Button();
btn.FontWeight = FontWeights.Bold;

WrapPanel pnl = new WrapPanel();

TextBlock txt = new TextBlock();
txt.Text = "Multi";
txt.Foreground = Brushes.Blue;
pnl.Children.Add(txt);

txt = new TextBlock();
txt.Text = "Color";
txt.Foreground = Brushes.Red;
pnl.Children.Add(txt);

txt = new TextBlock();
txt.Text = "Button";
pnl.Children.Add(txt);

btn.Content = pnl;
pnlMain.Children.Add(btn);

Naravno gore naveden primer je mogao biti napisan manje eksplicitno i koriscenjem vise sintaksnog secera,ali mislim da poenta i dalje stoji:XAML je prilicno kratak i koncizan za opisivanje interfejsa.