WPF এ যেকোন কন্ট্রোলকে দেখানোর জন্য চারটা প্রয়োজনীয় প্রপার্ট রয়েছে। যেমন লেবেলকে ফর্মে দেখাতে চাই তাহলে আমাকে যে কয়েকটা বিষয় খেয়াল রাখতে হবে, তার প্রথমে আসে তার দৈর্ঘ এবং প্রস্থ কত হবে? তারপর লেবেলটাকে ফর্মের কোথায় রাখা হবে?
এগুলো সমাধান করার জন্য এখন আমরা জানব খুবই প্রয়োজনীয় চারটা বৈশিস্ট্য সম্পর্কে, যেগুলো WPF এর প্রায় সব কন্ট্রোলে(যেমন Button, Label, TextBlock, TextBox ইত্যাদি) ব্যাবহার করতে হয়।
- Width বা দৈর্ঘ্য
- Height বা প্রস্থ
- HorizontalAlignment ভূমির সাথে তুলনা করে কোথায় থাকবে
- VerticalAlignment লম্বের সাথে তুলনা করে কোথায় থাকবে
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label Width="100" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top">Hello World </Label>
</Grid>
</Window>
উপরের কোডে লক্ষ্য করুন, লেবেলের জন্য আমরা চারটি বৈশিস্ট্য ঠিক করে দিয়েছি। নিচে আউটপুট দেখুন

কে কি ধরনের মান নেয়?
Height: এর মান একটা পুর্ণ সংখ্যা হয়,যেমন 50Width:এর মানও একটা পুর্ণ সংখ্যা হয়,যেমন100HorizontalAlignment: এ চারটা অপশন রয়েছে, তার যেকোন একটা নিয়ে কাজ করতে হয় i) Left ii) Right iii) Center এবং iv) Stretch (Stretchহচ্ছে সম্পূর্ণ উইন্ডোজে পাশাপাশি থাকা)VerticalAlignment:এরও চারটা অপশন রয়েছে,তার যেকোন একটা নিয়ে কাজ করেi) Top ii) Bottom iii) Center এবং iv) Stretch (Stretchহচ্ছে সম্পূর্ণ উইন্ডোজে লম্বা-লম্বি ভাবে থাকা)
-------------------------------------*****--------------------------------------------------
Margin
WPF এ মার্জিন খুবই গুরুত্তপূর্ণ। মার্জিনের দু'টা কাজ আছে
আসলে মার্জিনের সাহায্যে উইন্ডোজের দেয়াল হতে কন্ট্রল কত দূরে থাকবে তা নির্ধারন করা হয়ে থাকে।আর যদি Height , Width,HorizontalAlignment এবংVerticalAlignmentদেয়া না থাকে তাহলে মার্জিনই কন্ট্রলের আকার নির্ধারণ করে থাকে।
মার্জিন কি কি মান নেয় ?
মার্জিন সর্বোচ্চ চারটি মান নেয়, যেখানে প্রথমটা উইন্ডোজের দেয়াল থেকে বাম পাশের দূরত্ব, দ্বিতীয়টাউইন্ডোজেরউপরের দেয়াল থেকে দুরত্ব, তৃতীয়টাউইন্ডোজেরডান পাশের দেয়াল থেকে এবং সর্বশেষউইন্ডোজেরনিচের দেয়াল থেকে দুরত্ব। যেমন
<Label Margin="136,48,119,229">Hello World </Label>
যদি মার্জিনে একটি ভ্যালু দেয়া হয় তাহলে, সে এটাকেই চারদিকে নিয়ে নেয়।যদি দুইটা দেয়া হয় তাহলে প্রথম ভ্যালুটা ডান ও বাম পাশের জন্য ও দ্বিতীয় ভ্যালুটা উপর ও নিচের জন্য নিয়ে নেয়।মার্জিনে ৩ টা মান দেয়া যায় না।
- -----------------------------****-----------------------------------
একটা প্রজেক্টে যখন অনেক গুলো কন্ট্রোল থাকে তখন মার্জিন দিয়ে এভাবে পজিশনিং করা বা জায়গা মত কোন জিনিষকে বসানো খুবই কস্টকর। তাই জটিল কাজের জন্য WPF এ অনেক গুলো কন্টেইনার বা ধারক রয়েছে, যার সাহায্য খুব সহজেই যেকোন ইউজার ইন্টাফেস (UI) ডিজাইন করা যায়
কন্টেইনার বা ধারক
কন্টেইনারের উপরেই বিভিন্ন কন্ট্রল (যেমন Button, Label, TextBlock, TextBox ইত্যাদি) বসানো হয়। কন্টেইনার ব্যাবহারের সুবিধাকন্টেইনার ব্যাবহারের ফলে মার্জিন নিয়ে কস্ট করতে হয় নাখুব সহজেই বড় ডিজাইন করা যায়- ফর্মের সাইজ বোড়-ছোট করা হলে তার অনুপাত সহজেই নিয়ন্ত্রন করা যায়
নিচে কয়েক প্রকারের কন্টেইনারের বর্ণনা করা হল।- Grid
- StackPanel
- Canvas
- DockPanel
- WrapPanel
- UniformGrid
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="254*" />
<ColumnDefinition Width="249*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="138*" />
<RowDefinition Height="173*" />
</Grid.RowDefinitions>
</Grid>
এখন রো ও কলামের ভিতর কিভাবে লেবেল ও টেক্স বক্স যুক্ত করা হয়েছে, কোড দেখুন।
<Label Content="Name" Name="label1" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right" VerticalAlignment="Center" />
<TextBox Margin="10,0,0,0" Grid.Column="1" Grid.Row="1" Name="textBox1" Text="Maruf Hassan" VerticalAlignment="Center"/>
<Label Content="Mobile" Grid.Column="0" Grid.Row="1" Name="label2" VerticalAlignment="Center" HorizontalAlignment="Right" />
<TextBox Margin="10,0,0,0" Grid.Column="1" Grid.Row="1" Name="textBox2" Text="01556436270" VerticalAlignment="Center" />
আউটপুট নিচের মত

DockPanel: DockPanel কাজ করে উইন্ডজের দেয়াল ঘেষে। DockPanel এর প্রপার্টি হল Dock চারটি মান গ্রহন করতে পারে। যথা, Left, Right, Top, Bottom. অর্থাৎ DockPanel.Dock="Top" লিখলে প্যানেল্টা উইন্ডোজের উপরে থাকবে। নিচের কোড দেখুন, এখানে মেনু কে DockPanel.Dock="Top" এ রাখা হয়েছে। তারপর ডক প্যানেলে একটা গ্রিড নিয়ে তাতে ব্যাবহারকারীর নাম ও মোবাইল দেখানো হয়েছে।
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File" />
<MenuItem Header="_Edit" />
</Menu>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150*" />
<ColumnDefinition Width="353*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="47*" />
<RowDefinition Height="34*" />
<RowDefinition Height="34*" />
<RowDefinition Height="172*" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" Margin="5" Name="textBlock1" Text="Name" HorizontalAlignment="Right" />
<TextBlock Grid.Row="2" Margin="5" Name="textBlock2" Text="Mobile No" HorizontalAlignment="Right" />
<TextBox Grid.Column="1" Margin="5" Grid.Row="1" Name="textBox1" Background="DarkSalmon" Text="Maruf" />
<TextBox Grid.Column="1" Margin="5" Grid.Row="2" Name="textBox2" Background="DarkSalmon" Text="+8801556436270" />
</Grid>
</DockPanel>
আউটপুট হবে নিচের মত

যদি আমরা বাম পাশে লম্বালম্বি ভাবে কোন লেবেল দেখাতে চাই তাহলে DockPanel,Dock="Left" দিয়ে কাজটা করতে পারি। কোড দেখুন
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File" />
<MenuItem Header="_File" />
<MenuItem Header="_File" />
<MenuItem Header="_File" />
</Menu>
<Label DockPanel.Dock="Left" Content="Beautiful Bangladesh">
<Label.LayoutTransform>
<RotateTransform Angle="90" />
</Label.LayoutTransform>
</Label>
<Grid>
</Grid>
</DockPanel>
আউটপুট দেখুন

StackPanel: StackPanel তার ভিতরের আইটেম গুলাকে একটা রো বা একটা কলামে রাখে। যদি একটা রো বা কলামে না আটে তাহলে তাকে বাদ দিয়ে দেয়। রো বা কলাম নির্ধারন করা হয় Orientation এর দুটা মানে উপর। যথাঃ
- Vertical এটা বাই ডিফল্ট দেয়া থাকে, এর ভিতরের আইটেম গুলো উপর হতে নিচে এই ভাবে সাজানো থাকে
- Horizontal বা এর ভিতরের আইটেম গুলো পাশা-পাশি সাজানো থাকে
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="132*" />
<RowDefinition Height="0*" />
<RowDefinition Height="179*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Vertical" Margin="0,0,0,123" Grid.RowSpan="3">
<Button Content="Stacj Panel-Vertical Orientation" />
<Label Background="AntiqueWhite" Content="Beautiful Bangladesh--Vertical Orientation" />
<TextBox Text="This is Text Box-Vertical Orientation" Background="AliceBlue" />
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="2" Margin="0,0,0,123">
<Button Content="Ok-Horizontal Orientation" />
<Label Content="Hello-Horizontal Orientation" Background="Aquamarine" />
<TextBox Text="Text box-Horizontal Orientation" Background="Crimson"/>
</StackPanel>
</Grid>
আউটপুট দেখুন

Canvas: Canvas কন্টেইনার তার ভিতরের আইটেম বা চাইল্ডগুলোকে উইন্ডোজের দেয়াল হতে কত দূরে থাকবে তা ঠিক করে দেয়। এটাকে Dock Panel এর আরো কাস্টোমাইজেশ বলা যেতে পারে। এর চারটা প্রপারটি আছে
- Canvas.Top
- Canvas.Down
- Canvas.Left
- Canvas.Right
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas>
<Button Canvas.Top="50" Canvas.Left="50" Height="50" Width="100" Content="Top - Left"/>
<Button Canvas.Top="50" Canvas.Right="50" Height="50" Width="100" Content="Top - Right"/>
<Button Canvas.Bottom="50" Canvas.Left="50" Height="50" Width="100" Content="Bottom - Left"/>
<Button Canvas.Bottom="50" Canvas.Right="50" Height="50" Width="100" Content="Bottom - Right"/>
</Canvas>
</Window>
আউটপুট দেখুন

কন্টেইনার সম্পর্কে স্বল্প আলোচনা এখানেই শেষ।
এই ব্লগের উদ্দেশ্য WPF এর সাথে পরিচয় করিয়ে দেয়া, এক্সপার্ট হতে হলে অবশ্যই বই পড়তে হবে।
Onek sohoj vabe topics ta present kora hoyeche .
উত্তরমুছুনKhub valo laglo pore .
Thanks @ Pinku
উত্তরমুছুনবিগিনারদের জন্য অসাধারন টিউটোরিয়াল...
উত্তরমুছুনCarry on Maruf......
উত্তরমুছুন----Dipu
Thanks, I will try @ Dipu,
উত্তরমুছুন