Необходимо включить виртуализацию пользовательского интерфейса.
В настоящее время виртуализация пользовательского интерфейса отключена для ComboBox
!
Элементы управления, такие как ListBox
или ListView
, по умолчанию имеют эту функцию. Другие элементы управления, расширяющие ItemsControl
, например ComboBox
, должны включать его явно.
Чтобы включить виртуализацию пользовательского интерфейса
ItemsPresenter
(или любой Panel
с Panel.IsItemsHost
установлен в True
) из ItemsControl
должен быть дочерним элементом ScrollViewer
. Это уже имеет место для ComboBox
.
ScrollViewer
необходимо настроить для прокрутки по элементам (логическим единицам) вместо пикселей (физических единиц), установив прикрепленные ScrollViewer.CanContentScroll
на True
.
ItemsControl
должно иметь ItemsPanel
, установленное на VirtualizingStackPanel
.
Виртуализация режим VirtualizingPanel
должен быть включен, установив присоединенное свойство VirtualizingPanel.IsVirtualizing
к True
.
Пример
<ComboBox VirtualizingPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
Дальнейших улучшений можно добиться, включив отложенную прокрутку:
<ComboBox ScrollViewer.IsDeferredScrollingEnabled="True" />
Выполнение одного из следующих условий сделает невозможной виртуализацию пользовательского интерфейса:
Контейнеры предметов добавляются непосредственно в ItemsControl
. Например, если приложение явно добавляет ListBoxItem
объекты в ListBox
, ListBox
не виртуализирует ListBoxItem
объекты.
Контейнеры элементов в ItemsControl
бывают разных типов. Например, Меню, в котором используются объекты Separator
, не может реализовать повторное использование элементов, потому что Меню содержит объекты типа Separator
и MenuItem
.
Установка CanContentScroll
на false.
Установка IsVirtualizing
на false.
Если вы соблюдали все ограничения, виртуализация пользовательского интерфейса действительно работает. Тогда у вас возникнет проблема, не связанная с виртуализацией пользовательского интерфейса. Если вы создадите новый пустой проект только с ComboBox
, у вас не должно возникнуть проблем.