کنترل 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
در خطوط 21-18 هم، یک کنترل کنندهی رویداد به رویداد SelectedIndexChanged لیست باکس اضافه میکنیم. رویداد SelectedIndexChanged زمانی رخ میدهد که اندیس آیتم انتخاب شده تغییر کند. این رویداد، رویداد پیشفرض لیست باکس است. با اجرای برنامه و کلیک بر روی یک محصول، توضیحات مربوط به آن محصول در ListBox بعدی نمایش داده میشود: