מדריך WPF

מדריך WPF – פקדים בסיסיים: ListBox

‏ • Sela

הפקד ListBox מאפשר להציג למשתמש רשימה של ערכים שמתוכם המשתמש יכול לבחור אחד או יותר ערכים.

מדריך WPF – פקדים בסיסיים: ListBox

יצירת ListBox עם מספר ערכים

התכונה החשובה בפקד ListBox היא התכונה Items שאליה ניתן להכניס מספר אלמנטים מטיפוס ListBoxIItem, כאשר כל אלמנט כזה מייצג אלמנט אחד ברשימה.

יצירת רשימה עם מספר ערכים קבועים יכולה להתבצע באמצעות קוד הXAML הבא:

<Window x:Class="ControlsDemo.MainWindow"
       >="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       >:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow"
       Height="350"
       Width="525">
  <WrapPanel>
    <ListBox>
      <ListBox.Items>
        <ListBoxItem Content="Item 1" />
        <ListBoxItem Content="Item 2" />
        <ListBoxItem Content="Item 3" />
        <ListBoxItem Content="Item 4" />
      </ListBox.Items>
    </ListBox>
  </WrapPanel
>
</
Window
>

והתוצאה:

מדריך WPF – פקדים בסיסיים: ListBox

 

הוספת אלמנטים ל ListBox באמצעות קוד #C

לרוב נרצה לטעון את הערכים בצורה דינמית באמצעות קוד #C, לדוגמא כאשר הרשימה מגיעה מקובץ או ממסד נתונים. כדי לגשת לרשימה מהקוד ראשית יש לתת לה שם באמצעות x:Name כפי שלמדנו בפרק בתחילת המדריך ואז ניתן להוסיף ישירות לתכונה Items אלמנטים מסוג ListBoxItem.

להלן קוד XAML וקוד #C לאפליקציה שמוסיפה לפקד ListBox מספר אלמנטים דרך קוד:

<Window x:Class="ControlsDemo.MainWindow"
       >="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       >:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow"
       Height="350"
       Width="525">
  <WrapPanel>
    <ListBox x:Name="listBox" />
  </WrapPanel
>
</
Window
>

והקוד בשפת #C:

using System.Windows;
using
System.Windows.Controls;

namespace
ControlsDemo
{
 
/// <summary>
  /// Interaction logic for MainWindow.xaml
  /// </summary>
  public partial class MainWindow : Window
  {
   
public
MainWindow()
    {
      InitializeComponent();

     
for (int
i = 0; i < 10; ++i)
      {
       
ListBoxItem newItem = new ListBoxItem
();
        newItem.Content =
"Item " + i;
        listBox.Items.Add(newItem);
      }
    }
  }
}

תוצאת הרצת הקוד הנ"ל

מדריך WPF – פקדים בסיסיים: ListBox

 

בחירה יחידה או בחירה מרובה

הפקד ListBox יודע לעבוד בשלוש צורות עבודה שונות שנשלטות ע"י התכונה SelectionMode. לתכונה זו הערכים האפשריים הבאים:

  • Single – בצורת עבודה זו המשתמש יכול לבחור לכל היותר איבר אחד מתוך רשימת האיברים.
  • Multiple – בצורת עבודה זו המשתמש יכול לבחור מספר איברים מתוך הרשימה.
  • Extended – גם בצורת עבודה זו המשתמש יכול לבחור מספר איברים מהרשימה, השוני הוא באופן הבחירה. בשיטה זו הבחירה המרובה מתבצעת ע"י שימוש בכפתורים Ctrl ו Shift, באופן דומה לשיטת העבודה הסטנדרטית בWindows.

דוגמא לעבודה עם בחירה מרובה:

<Window x:Class="ControlsDemo.MainWindow"
       >="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       >:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow"
       Height="350"
       Width="525">
  <WrapPanel>
    <ListBox x:Name="listBox"
            SelectionMode="Multiple" />
  </WrapPanel
>
</
Window
>

מדריך WPF – פקדים בסיסיים: ListBox

 

האירוע SelectionChanged

האירוע SelectionChanged מופעל כאשר ישנו שינוי באלמנט שנבחר ברשימה. ניתן להשיג את האלמנט הנבחר החדש, אם יש רק אחד, ע"י התכונה SelectedItem. במידה ויש מספר איברים שנבחרו ניתן להשתמש בתכונה SelectedItems.

הקוד הבא מופעל כאשר הבחירה משתנה ומבצע מעבר על האיברים שנבחרו:

קוד הXAML:

<Window x:Class="ControlsDemo.MainWindow"
       >="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       >:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow"
       Height="350"
       Width="525">
  <WrapPanel>
    <ListBox x:Name="listBox"
            SelectionMode="Multiple"
            SelectionChanged="listBox_SelectionChanged" />
  </WrapPanel
>
</
Window
>

 

קוד #C:

private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
 
foreach (var selectedItem in
listBox.SelectedItems)
  {
   
//
  }
}

תגיות: , , , ,

arikp

אריק פוזננסקי הוא יועץ בכיר ומרצה בסלע. הוא השלים שני תארי B.Sc. במתמטיקה ומדעי המחשב בהצטיינות יתרה בטכניון. לאריק ידע נרחב בטכנולוגיות מיקרוסופט, כולל .NET עם C#, WPF, Silverlight, WinForms, Interop, COM/ATL, C++ Win32 ו reverse engineering.

תגובות בפייסבוק