Следующий фрагмент кода работает в Vista должным образом (фокус перемещается вниз по ListView), но в XP SP3 (с .Net 3.5 SP1 на обоих) он перемещается только между первыми двумя элементами ListView.
if (myListView.SelectedItem != null) {
IInputElement orig = FocusManager.GetFocusedElement(this);
FocusManager.SetFocusedElement(this, myListView);
ListViewItem lvi = myListView.ItemContainerGenerator.ContainerFromItem(myListView.SelectedItem) as ListViewItem;
TraversalRequest down = new TraversalRequest(FocusNavigationDirection.Down);
Boolean result = lvi.MoveFocus(down);
Console.WriteLine(result.ToString());
FocusManager.SetFocusedElement(this, orig);
}
Я вызываю этот код из события previewkeydown окна, когда фокус находится в текстовом поле.Сейчас я копаюсь в фреймворке, чтобы попытаться найти разницу между XP и Vista внутри MoveFocus ().Я чувствую, что снова занимаюсь веб-разработкой, тестирую браузеры на причуды ...