Хитрость заключается в том, чтобы явно установить фокус на контейнер для элемента первого элемента в ListView. Я нашел хорошее объяснение здесь .
Краткое содержание этого сообщения в блоге:
Поскольку элементы не доступны непосредственно после создания ListView, фокусировка должна произойти после того, как все элементы сгенерированы в фоновом режиме. Итак, присоединитесь к событию StatusChanged
из ItemContainerGenerator
:
Persons.ItemContainerGenerator.StatusChanged += ItemContainerGenerator_StatusChanged;
А в обработчике событий установите фокус после завершения генерации:
private void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
if (Persons.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
int index = Persons.SelectedIndex;
if (index >= 0)
((ListViewItem)Persons.ItemContainerGenerator.ContainerFromIndex(index)).Focus();
}
}
Это решение не так просто, как я надеялся, но оно сработало для меня.