Моя цель - создать комбинированный список, который отображает любой список строк при открытии (так стандартное поведение), но когда пользователь выбирает одну из строк, она добавляется в верхней части списка под «Недавно использованными» сепаратор.
По сути, я хочу элемент управления, который ведет себя точно так же, как элемент управления для выбора шрифтов в MS Word:

Я начал с создания пользовательского элемента управления с дополнительным свойством Dependency, которое содержит недавно выбранные элементы. Этот список обновляется, когда пользователь выбирает элемент из списка. Я не хочу изменять исходный список элементов, поскольку я стремлюсь получить элемент управления многократного использования, при котором пользователю не нужно самим управлять самыми последними элементами.
private static readonly DependencyPropertyKey LastSelectedItemsPropertyKey =
DependencyProperty.RegisterReadOnly(
"LastSelectedItems",
typeof (Dictionary<string, int>),
typeof (MemoryCombobox),
new FrameworkPropertyMetadata(default(ObservableCollection<string>), FrameworkPropertyMetadataOptions.None));
public static readonly DependencyProperty LastSelectedItemsProperty = LastSelectedItemsPropertyKey.DependencyProperty;
Теперь у меня вопрос: как я могу отобразить все элементы (метки и оба списка) в одном выпадающем списке, например:
---------------------
Label: Recently Selected
---------------------
<All items from the 'LastSelectedItems' DependencyProperty>
---------------------
Label: All Items
---------------------
<All items from the 'ItemsSource' property of the combobox
---------------------
Я не хочу использовать для этого группировку, поскольку элементы не будут повторяться в списке «все элементы» ниже недавно использованных, как ожидал бы пользователь.