На Xbox One фокус перемещается с помощью системы навигации XY, режим мыши включен по умолчанию для приложений UWP, работающих на Xbox One.Чтобы отключить режим мыши и включить навигацию по XY-фокусу, установите Application.RequiresPointerMode=WhenRequested
.
Пожалуйста, проверьте Навигация по XY-фокусу и взаимодействие .
Существует три распространенных причины, по которым навигация по XYможет работать не так, как вы ожидаете:
Неправильно установлено свойство IsTabStop или Visibility.
Фактически элемент управления получает фокусбольше, чем вы думаете - XY-навигация смотрит на общий размер элемента управления (ActualWidth и ActualHeight), а не только на часть элемента управления, которая представляет что-то интересное.
Один фокусируемый элемент управления включенповерх другого - XY-навигация не поддерживает элементы управления, которые перекрываются.
Если XY-навигация все еще не работает так, как вы ожидаете после исправления этих проблем, вы можете вручную указать на элементчто вы хотите получить фокус, используя метод, описанный в Переопределение навигации по умолчанию .
[Обновлено в 2019/5/23]
Я не могу использовать фокус XY, потому что все GridView (одна строка включена) генерируются динамически.Таким образом, фокус XY не может обрабатывать один элемент в GridView1 к другому элементу в GridView2.
Предположим, что фокус находится на элементе 1 в GridView1, нажмите кнопку «вниз», фокус переместится на элемент 1 в GridView2.По умолчанию при нажатии кнопки «вниз» фокус переходит к пункту 2 в GridVew1.
По вашему конкретному требованию вы можете попытаться отследить событие нажатия клавиши и проверить, нажата ли клавиша геймпада вобработчик события.См. Ответ Ника Крамера [MSFT] по этому делу .
Здесь происходит две вещи.Во-первых, вы никогда не получите ключ XAML KeyDown с e.Key == GamepadA / B / left / right / up / down - все они переведены в ближайший эквивалент клавиатуры.Вместо этого вы можете использовать свойство e.OriginalKey, чтобы получить клавишу геймпада до того, как она будет переведена в эквивалент клавиатуры.
После этого вам нужно проверить, является ли текущий сфокусированный элемент управления GridView1.Вы можете использовать FocusManager.GetFocusedElement метод.Если текущим сфокусированным элементом управления является GridView1, то вы можете использовать метод FocusManager.TryFocusAsync , чтобы сфокусировать GridView2, и установить SelectedIndex
или SelectedItem
, чтобы сделать выбранный конкретный элемент.