TOC

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

XAML:

Basic XAML

در فصل قبل, ما درباره اینکه XAML چیست و برای چه استفاده میشود صحبت کردیم. اما چطور یه کنترل( control ) در XAML میسازید؟همانطور که در فصل بعد خواهید دید, ساخت یک کنترل در XAML به سادگی نوشتن اسم آن و قرار دادن آن بین دو علامت کوچک تر و بزرگتر <> میباشد. برای مثال, یک دکمه ( Button ) به این شکل است:

<Button>

تگ های XAML باید یا با نوشتن تگ انتهایی و یا با قرار دادن علامت slash ( / ) در انتهای تگ اول بسته بشوند:

<Button></Button>

یا

<Button />

بسیاری از کنترل ها به شما اجازه قرار دادن متن, بین تگ شروع و تگ پایان را میدهند, که به عنوان متن کنترل حساب میشود. برا مثال کنترل دکمه ( button control ) به شما اجازه نوشتن متن روی دکمه را بین دو تگ شروع و پایان میدهد:

<Button>A button</Button>

HTML ( یک زبان نشانه گذای در وب ) به حروف بزرگ و کوچک حساس نیست اما XAML حساس است. به این دلیل که نام کنترل باید با نوع داده خودش در دات نت فریم ورک, مطابقت داشته باشد. این شرایط برای نام صفت ها ( attribute names ) که با مشخصه های کنترل مطابقت دارد, هم یکسان است. اینجا یک دکمه ( button ) داریم که یک سری مشخصه ها را ( properties ) با اضافه کردن صفات ( attributes ) به تگ مشخص کردیم:

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

ما مشخصه ی وزن متن (FontWeight) را تنظیم کردیم که به ما متن توپر(bold) میدهد، و بعد مشخصه محتوا (Content) را تنظیم کردیم که فرقی (در کاری که انجام میده) با نوشتن متن بین تگ ها ابتدایی و انتهایی ندارد. به هر حال همه صفات یک کنترل میتوانن مثل همین مشخص شوند ، برای اینکه یه عنوان تگ فرزند از کنترل اصلی شناخته شوند . از این فرمول استفاده کنید : نام کنترل - نقطه - نام مشخصه

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

نتیجه دقیقا مثل بالا میشود ، پس در این مثال ، تنها تفاوت در نحوه نوشتن است و نه چیز دیگر. هرچند تعداد زیادی از کنترل ها به شما این اجازه را میدهند که از یک کنترل دیگر به عنوان مقدار یک مشخصه استفاده کنید. مثل این مثال که ما متنی در رنگ های مختلفی ایجاد کردیم بوصیله استفاده کردن از چند کنترل متن(TextBlock) داخل یک کنترل دکمه (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>

مشخصه محتوا (Content) فقط اجازه داشتن یک المان فرزند را میدهد، پس ما از (WrapPanel) استفاده کردیم تا چند بخش متن با رنگ های متفاوت داشته باشیم. پنل ها، مثل (WrapPanel)، نقش مهمی رو در WPF اجرا میکنند و ما درمورد آنها با جزئیات بیشتر در آینده بحث خواهیم کرد- فعلا فقط آنها را به عنوان نگهدارنده ی کنترل های دیگر در نظر بگیرید

نتیجه دقیقا مشابه نتیجه قبل با این نشانه گذاری بدست می آید، که به سادگی روش دیگری از نوشتن همان کد قبل است

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

Code در برابر. XAML

امیدوارم مثال های بالا به شما نشان داده باشد که نوشتن XAML بسیار آسان است، اما با تعداد زیادی روش برای انجام آن، و اگر شما فکر میکنید که مثال های بالا نشانه گذاری های (کدنویسی) زیادی برای بدست آوردن یک دکمه با متن چند رنگی داخلش داشت، پس این روش را با انجام همین کار در سی شارپ مقایسه کنید:

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);

البته که مثال بالا را میتوان با پیچیدگی کمتر و استفاده از روش نوشتن شیرین تر انجام داد ، اما من فکر میکنم که نکته هنوز سر جای خودش است : XAML برای توصیف رابط کاربری خیلی مختصر و کوتاه است