2012-03-13 7 views
4

Я нахожусь в своем остроумие, пытаясь понять это. Я опыт в WPF, но я никогда не видел ничего подобного.ListBox Shift-Click Multi-Select Anchor не устанавливается должным образом

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

Проблема: нажав на элемент в списке, затем Shift-Clicking на другом элементе выбирает правильный диапазон элементов, как вы ожидали. К сожалению, использование стрелок вверх/вниз не работает должным образом - вместо этого выбранный диапазон всегда, как представляется, основывается на последнем элементе 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 внутри. Насколько мне известно, я полагаю, что это связано с тем, что «Multi-select anchor» ListBox устанавливается с помощью мыши, но не с помощью клавиш со стрелками.

С кем-либо сталкивались и решали это раньше? Есть ли способ установить «multi-select anchor» вручную? Спасибо за вашу помощь!

Chris

ответ

2

Я понял, разрешение на это:

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

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

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

Смежные вопросы