Я использую этот метод для фокусирования на конкретном элементе комбинированного окна.
/// <summary>Combo box focus index.</summary>
private int cbfi = -1;
/// <summary>Focus specified list item based on char match to language name.</summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void onLangComboInput(object sender, TextCompositionEventArgs e) {
var cb = sender as ComboBox;
var ch = e.Text;
var it = cb.findNext<StackPanel, UIElement>(
//...
);
if (it == null) return;
it.Focusable = true;
it.Focus();
Keyboard.Focus(it);
}
Метод работает в том смысле, что он правильно фокусирует элемент из списка, и список прокручивается нормально, но у меня естьпроблема при применении сфокусированного элемента как ComboBox SelectedItem
, когда я нажимаю Enter - выбран какой-то другой элемент, кроме сфокусированного, и я не могу понять, почему.Похоже, клавиатура фокус установлен неправильно.
Обновление
В основном у меня есть обычный System.Windows.Controls.Combobox
со списком около 300 пользовательских элементов просмотра.Я хочу, чтобы базовая функциональность переходила к элементу, который начинается с соответствующего символа в расширенном списке, когда я нажимаю на символ на клавиатуре (но я не хочу автоматического выбора, просто фокусируюсь и прокручиваю до этого элемента).
Иснова.У меня есть пользовательский вид элемента, который я добавляю к ListView
- Items.Add(mycustomUIElement)
, а экземпляр ListView
устанавливается как DataContext
из ComboBox
.Каждый элемент представления имеет свой собственный DataContext
, назначенный определенному элементу данных.И элемент данных содержит свойство вложенной строки, которое сравнивается с вводимым символом.Также у меня есть альтернативная строка, если основная функция недоступна, поэтому я не могу использовать встроенную функциональность, как в этот вопрос .
Поиск и прокрутка элементов работает нормально, но с клавиатуройфокусировка, кажется, не всегда работает.Например, когда я нажимаю клавишу ввода, выбирается неправильный элемент или когда используются клавиши со стрелками, следующий элемент не является соседом целевых элементов.