کنترل ListBox

کنترل ListBox برای نمایش لیستی از رشته‌ها که قابل انتخاب هستند، استفاده می‌شود. به طور پیش فرض شما فقط می‌توانید یک آیتم را انتخاب کنید. کنترل ListBox بهترین گزینه برای مواقعی است که شما می‌خواهید تعداد زیادی آیتم را نمایش دهید. در جدول زیر برخی از خواص کنترل ListBox را مشاهده می‌کنید:

خواص توضیح
ItemsSource منبع داده‌های را که در ListBox نمایش داده می‌شوند را، مشخص می‌کند.
Items حاوی آیتم‌هایی است که در ListBox نمایش داده می‌شوند.
SelectedIndex اندیس آیتم انتخاب شده را مشخص می‌کند.
SelectedItem آیتم انتخاب شده را به عنوان یک شیء بر می‌گرداند.
SelectedItems مجموعه‌ای از اشیاء آیتم‌های انتخاب شده را بر می‌گرداند.
SelectionMode تعداد آیتم‌هایی که شما در یک لحظه می‌توانید انتخاب کنید را مشخص می‌کند.
Single – فقط یک آیتم را می‌توانید انتخاب کنید.
Multiple – شما می‌توانید چند آیتم را به سادگی با کلیک کردن بر روی آنها انتخاب کنید.
Extended – شما می‌توانید آیتم‌های مختلفی را در با نگه داشتن کلیدهای Ctrl ،Shift و همچنین کلیدهای مکان نما انتخاب کنید.

برای دستکاری آیتم‌های درون یک لیست باکس، ما از خاصیت Items که از نوع ObjectCollection است استفاده می‌کنیم. شما می‌توانید از مجموعه‌ای از متدها مثل Remove ،Add و Clear استفاده کنید. به یک مثال در مورد ListBox توجه کنید:

 1: <Grid>
 2:     <Grid.ColumnDefinitions>
 3:         <ColumnDefinition Width="*" />
 4:         <ColumnDefinition Width="*"/>
 5:     </Grid.ColumnDefinitions>
 6: 
 7:     <ListBox x:Name="listBoxInventory"              
 8:              Grid.Column="0" 
 9:              Loaded="listBoxInventory_Loaded" 
10:              SelectionChanged="listBoxInventory_SelectionChanged">
11:     </ListBox>
12:     
13:     <ListBox x:Name="listBoxDescription" 
14:              Grid.Column="1">
15:     </ListBox>
16:     
17: </Grid>

در کد بالا یک Grid ایجاد کرده و آن را به دو ستون تقسیم کرده‌ایم (خطوط 5-2). در هر یک از این ستون‌ها یک ListBox قرار داده‌ایم. نام اولین listBoxInventory ،ListBox و نام دومین listBoxDescription ،ListBox می‌باشد (خطوط 7 و 13). برای ListBox اول در خطوط 9 و 10 به ترتیب دو رویداد Load و SelectionChanged تعریف و دو کنترل کننده رویداد به آنها اختصاص داده‌ایم:

حال در قسمت کدنویسی سی شارپ کدهای این دو کنترل کننده رویداد را به صورت زیر می‌نویسیم:

 1: private Dictionary<string, string> products;
 2: 
 3: private void listBoxInventory_Loaded(object sender, RoutedEventArgs e)
 4: {
 5:     products = new Dictionary<string, string>();
 6:     products.Add("Shampoo"   , "Makes your hair beautiful and shiny.");
 7:     products.Add("Soap"      , "Removes the dirt and germs on your body.");
 8:     products.Add("Deodorant" , "Prevents body odor.");
 9:     products.Add("Toothpaste", "Used to clean your teeth.");
10:     products.Add("Mouthwash" , "Fights bad breath.");
11: 
12:     foreach (KeyValuePair<string, string> product in products)
13:     {
14:         listBoxInventory.Items.Add(product.Key);
15:     }
16: }
17: 
18: private void listBoxInventory_SelectionChanged(object sender, SelectionChangedEventArgs e)
19: {
20:     listBoxDescription.Items.Add(products[listBoxInventory.SelectedItem.ToString()]);
21: }

خطوط 16-1 کنترل کننده رویداد مربوط به رویداد Load را نوشته‌ایم. در این خطوط، ما مجموعه‌ای به نام products که یک کلید رشته‌ای و یک مقدار رشته‌ای دارد را ایجاد کرده‌ایم. در داخل کنترل کننده‌ی رویداد Load مربوط به ListBox اول، ما تعدادی محصول را به همراه توضیحاتی در مورد آنها به این مجموعه اضافه کرده‌ایم. با استفاده از حلقه‌ی Foreach، ما نام هر محصول را به خاصیت Items لیست باکس اضافه می‌کنیم. به این نکته توجه کنید که هر آیتم در کلکسیون products از نوع KeyValuePari می‌باشد. وقتی برنامه را اجرا می‌کنید، شما پنج محصول را در داخل لیست باکس مشاهده می‌کنید. به یاد داشته باشید در صورتیکه ارتفاع لیست باکس شما برای نمایش آیتم‌های آن کافی نباشد، یک نوار Scroll عمودی در سمت راست آن دیگه خواهد شد.
در خطوط 21-18 هم، یک کنترل کننده‌ی رویداد به رویداد SelectedIndexChanged لیست باکس اضافه می‌کنیم. رویداد SelectedIndexChanged زمانی رخ می‌دهد که اندیس آیتم انتخاب شده تغییر کند. این رویداد، رویداد پیشفرض لیست باکس است. با اجرای برنامه و کلیک بر روی یک محصول، توضیحات مربوط به آن محصول در ListBox بعدی نمایش داده می‌شود: