Элемент ListBox представляет собой обычный список. Содержит коллекцию элементов ListBoxItem, которые являются элементами управления содержимым. Также ListBox может содержать любые другие элементы, например:
<ListBox Name="phonesList"> <TextBlock FontWeight="Bold" Text="Новинки 2017 года" /> <ListBoxItem Background="LightGray">LG G6</ListBoxItem> <ListBoxItem>Huawei P10</ListBoxItem> <ListBoxItem Background="LightGray">iPhone 8</ListBoxItem> <ListBoxItem>Samsung Galaxy S8</ListBoxItem> <ListBoxItem Background="LightGray">Xiaomi Mi6</ListBoxItem> <ListBoxItem>HTC U Ultra</ListBoxItem> </ListBox>
Все эти элементы будут находиться в коллекции phonesList.Items
и, таким образом, по счетчику мы сможем к ним обратиться, например,
phonesList.Items[0]
- первый элемент ListBox, который в данном случае представляет TextBlock. Также мы можем установить элемент:
phonesList.Items[2]="Google Pixel";
Компонент ListBoxItem представляет элемент управления содержимым, поэтому также мы можем задавать через его свойство Content более сложные композиции элементов, например:
<ListBox Name="Photos" Background="Lavender"> <ListBoxItem Margin="3"> <StackPanel Orientation="Horizontal"> <Image Source="/assets/oduvanchiki.jpg" Width="60" /> <TextBlock Margin="15 0 0 0">Одуванчики</TextBlock> </StackPanel> </ListBoxItem> <StackPanel Orientation="Horizontal"> <Image Source="/assets/siren.jpg" Width="60" /> <TextBlock Margin="15 0 0 0">Сирень</TextBlock> </StackPanel> <StackPanel Orientation="Horizontal"> <Image Source="/assets/kamni.jpg" Width="60" /> <TextBlock Margin="15 0 0 0">Камни</TextBlock> </StackPanel> </ListBox>
В данном случае предполагается, что в папке Assets у нас находятся три файла изображений. Мы можем использовать элементы как внутри ListBoxItem, так и непосредственно вставлять их в список.
В в реальности, конечно, редко придется прибегать к подобному определению элементов списка. Как правило, весь список задается через привязку через свойство ItemsSource, как было расмотрено в прошлой теме. А для отображения сложных данных обычно применяются шаблоны DataTemplate, которые будут рассмотрены в следующей теме.
ListBox поддерживает множественный выбор. Для этого нужно установить свойство SelectionMode="Multiple"
или
SelectionMode="Extended"
. В последнем случае, чтобы выделить несколько элементов, необходимо держать нажатой клавишу Ctrl или Shift.
По умолчанию SelectionMode="Single"
, то есть допускается только единственное выделение.