Главная » WPF » Элементы ListBox и ComboBox

0

На рис. 3.14 изображены два основных вида списков: ListBox и ComboBox. Конечно, ComboBox обеспечивает иное, нежели ListBox, представление, но с точки зрения объектной модели эти два элемента почти тождественны. Пер# воначально  выпадающая  часть ComboBox была реализована с помощью ListBox.

Лучше  пользоваться свойством  ItemsSource. Хотя  в  качестве  источника

данных для списка может выступать любой тип, реализующий интерфейс IEnumerable, в .NET 3.0 включен  новый тип набора, предназначенные специ# ально для таких случаев: ObservableCollection<T>. Этот тип реализует нес# колько  интерфейсов для отслеживания изменений,  которые делают его более удобным в качестве источника  данных для списков  (детали  рассматриваются в главе 6).

Рис. 3.14. Два основных вида списков: ListBox и ComboBox

Как вы, наверное, догадались,  памятуя  о двух фундаментальных концепциях элементов  управления – модели содержимого  и шаблонах, мы можем поместить в списковые  элементы любые данные и изменять  их внешний вид с помощью шаблонов. Кроме того, у элементов ListBox и ComboBox есть ряд свойств для из# менения  облика без написания нового шаблона.

Наверное, чаще всего для настройки списка применяется свойство ItemsPanel. Оно  позволяет  определить  шаблон  для  создания  панели  размещения, которая служит  для отображения элементов  списка. Подробнее  о размещении мы будем говорить в главе 4.

Чтобы понять, как пользоваться этим свойством, вспомните  панель управле# ния в Windows XP (рис. 3.15). Это объект типа ListBox (поскольку возможность выбора не обязательна, можно было бы взять и базовый класс ItemsControl), эле# менты которого размещены в ячейках сетки. Объекту ItemsPanel передается шаб# лон ItemsPanelTemplate (не обычный объект ControlTemplate), который требует, чтобы шаблон  построил  панель.  В качестве  менеджера  размещения для списка можно было использовать класс UniformGrid, который дает результат, очень близкий  к панели управления (рис. 3.16):

<ListBox …>

<ListBox.ItemsPanel>

<ItemsPanelTemplate>

<UniformGrid Columns=’2’/>

</ItemsPanelTemplate>

</ListBox.ItemsPanel>

</ListBox>

Но существенно  дальше с помощью одного лишь свойства  ItemsPanel мы не продвинемся;  рано или поздно возникнет желание создать для списка специаль# ный шаблон. Шаблон  для списка строится  точно так же, как для любого другого элемента  управления, но с одним  важным  исключением:  списковому  элементу нужно  место, в котором  будут отображаться его данные.  Когда  для  настройки

списка применяется свойство ItemsPanel, элемент знает, куда помещать  данные. Если же мы пользуемся свойством Template, то списковый элемент должен поис# кать в своем дереве отображения панель, на которую  следует выводить  данные. Нужную  панель (одну или несколько) мы помечаем свойством IsItemsHost6:

Рис. 3.15. Панель управления Windows XP в режиме по категориям: пример списка с нестандартным размещением

Рис. 3.16. Элемент управления ListBox с сеточным размещением

6  В шаблоне по умолчанию для ListBox в качестве владельца элементов списка используется класс

ItemsPresenter, который согласован со свойством ItemsPanel.

<ControlTemplate TargetType=’{x:Type ListBox}’>

<Border BorderBrush=’Black’ BorderThickness=’1’>

<!— other elements —>

<UniformGrid IsItemsHost=’True’ Columns=’2’ />

</Border>

</ControlTemplate>

Детализировав шаблон, мы сможем еще ближе подойти к виду панели управ#

ления (рис. 3.17).

Шаблоны  – это замечательный способ настроить  внешний  вид списка. Когда накопится достаточно много сложных  шаблонов, вы, наверное, захотите  собрать их в пакет, чтобы можно  было использовать в других  приложениях. Шаблоны прекрасно  работают до тех пор, пока не возникает  необходимость  ассоциировать с ними новые свойства. Например, если бы мы захотели  создать шаблон для по# каза списка в несколько колонок, понадобилось  бы место для хранения информа# ции о колонках. Несложно определить  новый элемент управления, производный от ListBox, и включить  в него дополнительные данные.

Другой способ решить ту же задачу – воспользоваться элементом  ListView, в который уже встроены необходимые средства.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии