MultiB Select Anchor ListBox Shift-Click не устанавливается должным образом - PullRequest
4 голосов
/ 13 марта 2012

Я нахожусь в конце своего остроумия, пытаясь понять это. У меня есть опыт работы в WPF, но я никогда не видел ничего подобного.

У меня есть ListBox, который содержит выбираемые элементы ListBoxItems. Элементы в списке могут быть выбраны щелчком мыши или с помощью стрелок вверх / вниз. Я использую SelectionMode.Extended, поэтому мой список поддерживает несколько вариантов выбора.

Проблема: при нажатии на элемент в списке, затем при нажатии Shift на другом элементе выбирается правильный диапазон элементов, который вы ожидаете. К сожалению, использование стрелок вверх / вниз не работает должным образом - вместо этого выбранный диапазон всегда основывается на последнем элементе CLICKED, а не на элементе, который был выбран с помощью клавиш со стрелками.

Например:

[Item 1] <- Click this item
[Item 2] <- Use the down arrow to select this item
[Item 3] <- Shift-Click this item

Можно ожидать, что будут выбраны элементы 2 и 3. Вместо этого будут выбраны все элементы (1, 2 и 3).

Все свойства ListBox имеют правильные значения (т. Е. Использование клавиш со стрелками обновляет свойство SelectedItems), моя единственная проблема, похоже, заключается в том, как ListBox обрабатывает выделение Shift-Click внутри. Насколько я знаю, я считаю, что это связано с тем, что в ListBox «множественный выбор якоря» устанавливается щелчком мыши, но не с помощью клавиш со стрелками.

Кто-нибудь сталкивался и решал это раньше? Есть ли способ установить «множественный выбор якоря» вручную? Спасибо за вашу помощь!

Chris

1 Ответ

2 голосов
/ 22 марта 2012

Я разобрался с разрешением на это:

Чтобы решить эту проблему, вы должны установить Фокус на элемент после изменения SelectedIndex:

if (SelectedIndex > 0) {
     SelectedIndex--;
     ListBoxItem item = ItemContainerGenerator.ContainerFromIndex(SelectedIndex) as ListBoxItem;
     item.Focus();
}

Так вы перемещаете выделение вниз по списку. Тем не менее, вам нужно установить фокус на элемент для выбора с нажатой клавишей Shift, чтобы распознать элемент как якорь.

...