TOC

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

XAML:

Basic XAML

আগের চ্যাপ্টারে আমরা XAML কি এবং কি কারণে এটা ব্যবহার করা হয় তা নিয়ে কথা বলেছি । কিন্তু তুমি XAML এ control কিভাবে তৈরি করবা? পরের উদাহরণে আমরা দেখব, XAML এ control তৈরি করা এর নাম লিখার মতই সহজ, যা ঘিরে থাকে angle ব্রাকেট দাড়া। একটা বাটন দেখতে হয় এমন ঃ

<Button>

XAML ত্যাগ লেখার সময় এটাকে শেষ করা লাগে একটা end ট্যাগ এর মাধ্যমে অথবা start ট্যাগ এর শেষে একটা ফরোয়ার্ড স্লাশ এর মাধ্যমেঃ

<Button></Button>

অথবা

<Button />

অনেক control, start এবং end ট্যাগ এর মাঝে content দেওয়ার অনুমতি দেয়, যেটা তখন content এর control হয়ে যায়। যেমন button control, start এবং end ট্যাগ এর মাঝে text কে নির্দিষ্ট করার অনুমতি দেয় ঃ

<Button>A button</Button>

HTML কেস সেন্সিটিভ না কিন্তু XAML কেস সেন্সিতিভ, কারন control নামের .NET ফ্রেমওয়ার্কের কোন একটা টাইপের সাথে মিলা লাগে। একই ব্যাপার attributes এর নামের ক্ষেত্রেও খাটে, যেটার সাথে control এর বৈশিষ্ট মিলা লাগে। একানে আমরা একটা button এর কিছু বৈশিষ্ট বর্ণনা করছি attribute ট্যাগ যোগ করার মাধ্যমেঃ

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

আমরা FontWeight property সেট করি যেটা আমাদের bold টেক্সট দেয়, এরপর আমরা Content property সেট করি, যেটা start এবং end ট্যাগ এর মাঝে text লেখারই মত একই জিনিস। যাই হোক, control এর সকল attributes কে, main control এর child ট্যাগ হিসেবেও বর্ণনা করা যায়, Control.Property ব্যবহার করে ঃ

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

রেসাল্ট আগের মতই একই, তাই এক্ষেত্রে বলাই যায় এতা শুধুমাত্র syntax এর ভিন্ন প্রয়োগ । যাইহোক, অনেক control টেক্সট ছাড়াও অন্য control কে নিজের ইন্সত্যান্স এর ভিতর অনুমতি দেয়। এখানে একটা উদাহরণ দেখান হয়েছে যেখানে কয়েকটা TextBlock control ব্যবহার করে একই button এর ভিতরে বিভিন্ন রঙের এর text প্রিন্ট করা হয়েছে ঃ

<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 property শুধুমাত্র একটা child ব্যবহারের অনুমতি দেয়, এজন্য আমরা একটা WrapPanel ব্যবহার করেছি ভিন্ন কালার এর text কে রাখার জন্য। এই WrapPanel এর মত Panel গুরুত্তপূর্ণ রোল প্লে করে এবং এটা নিয়ে আমরা পরে আলোচনা করব। এখনের জন্য আমারা এটাকে জাস্ত একটা container হিসেবে বিবেচনা করি অন্যান্য control এর জন্য।

একই রেসাল্ট পাওয়া সম্ভব নিচের মার্কাপ ফলো করে, যেটা আরেকটা উপায় সেম জিনিস লেখার ঃ

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

Code vs. XAML

আশা করা যায়, উপরের উদাহরণগুলি তোমাকে দেখাচ্ছে XAML লেখা বেশ সহজ, কিন্তু এটা লেখার অনেক ভিন্ন ভিন্ন উপায় আছে এবং তুমি যদি ভাব যে উপরের উদাহরণে তোমাকে অনেক markup লিখা লাগতেসে জাস্ত একটা button এর ভিতর ভিন্ন রঙ এর text পাওয়ার জন্য, তুমি 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);

অবশ্যই উপরের উদাহরণটি আরও কম স্পস্তভাবে লেখা সম্ভব syntactical sugar ব্যবহার করে, কিন্তু আমার মনে হয় আমাদের পয়েন্ট আমরা রাখতে পেরেছিঃ XAML বেশ কন্সাইস এবং ছোট interface বর্ণনা করার জন্য।