Я обычно вызываю myControl.Focus()
в обработчике событий Loaded, но, похоже, это не работает для ListBox
, который привязан к списку пользовательских объектов. Когда я запускаю свое приложение, первый элемент ListBox
выбирается, но фокус находится в другом месте.
Я думал, что это может быть потому, что фокус устанавливается до того, как в него загружаются элементы с привязкой к данным ... но следующий код показывает, что действительно есть элементы, потому что ctrlItemsCount
показывает число 8.
Как я могу установить начальный фокус в этой ситуации, и каково правильное место, чтобы обычно установить начальный фокус?
private void onLoad(object sender, RoutedEventArgs e) {
if (ctrlCountries.Items.Count > 0) {
ctrlItemsCount.Text = ctrlCountries.Items.Count;
ctrlCountries.SelectedIndex = 0;
FocusManager.SetFocusedElement(this, ctrlCountries);
}
}
РЕДАКТИРОВАТЬ: Я переместил этот код в загруженное событие для самого фактического ListBox
. Это почти работает - теперь фокус на ListBox
, но мне все еще нужно нажать клавишу ВНИЗ один раз, прежде чем у пункта № 0 появится курсор клавиатуры. Другими словами, фокус или курсор на 1 ступень выше элемента № 0 по некоторым причинам:
private void onCountriesLoaded(object sender, RoutedEventArgs e) {
ctrlCountries.SelectedIndex = 0;
FocusManager.SetFocusedElement(this, ctrlCountries);
Keyboard.Focus();
}