Table of Contents

Списки и выбор

Поле со списком со значением «Caves» над списком, где выбран Forest, затем Caves и Castle

Эти элементы показывают коллекцию элементов из модели представления. ListBox показывает их все и позволяет игроку выбрать один; ComboBox и Dropdown показывают выбранный элемент и открывают список по требованию. ItemsControl просто показывает элементы, а WrapGrid раскладывает их сеткой одинаковых ячеек, как инвентарь.

Разметка

<!-- ComboBox and ListBox show the items of ItemsSource and select one of them. -->
<StackPanel Orientation="Vertical" Width="240">
  <ComboBox ItemsSource="{Binding Levels}" SelectedIndex="1" Margin="0,0,0,8" />
  <ListBox ItemsSource="{Binding Levels}" SelectedIndex="0" Height="96" />
</StackPanel>

ItemsSource берётся из контекста данных (здесь — список названий уровней). SelectedIndex можно задать до появления элементов: он применится, как только они появятся.

Основные свойства

Свойство Описание
ItemsSource Показываемые элементы. Используйте ObservableCollection<T>, чтобы добавления и удаления отображались.
ItemTemplate Как выглядит каждый элемент. Без шаблона элемент показывает свой ToString().
SelectedIndex / SelectedItem Выделение; -1 / null — ничего не выбрано.
DisplayMemberPath Для поля со списком и выпадающего списка — какое свойство элемента показывать.
IsOpen Открыт ли список у поля со списком или выпадающего списка.
ItemWidth / ItemHeight Размер ячейки сетки.

События и команды

SelectionChanged срабатывает при изменении выделения. Обычно проще двусторонне привязать SelectedItem.

Стиль

Каждый элемент находится внутри SelectorItem с визуальными состояниями Hovered, Selected, SelectedHovered, Highlighted, HighlightedHovered и Disabled. Поле со списком и выпадающий список используют Hovered и Focused.

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

Клавиатура, геймпад и сенсорный ввод

Щелчок или касание выбирает элемент. Если поле со списком или выпадающий список в фокусе, Enter или кнопка A геймпада открывает список, стрелки и крестовина перемещают подсветку, а Enter или A подтверждают выбор. Escape или B закрывают список. Поле со списком к тому же фильтрует список по мере ввода.

Примечание

Элементы списка ListBox пока нельзя выбрать с клавиатуры или геймпада — только щелчком или касанием.

ListBox

Показывает элементы столбцом. Внутри ScrollViewer он прокручивается; сам по себе показывает те элементы, что умещаются по высоте.

ComboBox

Редактируемое поле: игрок может вводить текст, чтобы отфильтровать список.

Как поле со списком, но без ввода текста.

ItemsControl

Основа всех этих элементов: элементы и шаблон, без выделения.

WrapGrid

Заполняет ряды одинаковых ячеек с переносом — для инвентарей и сеток уровней.

См. также