Почему в окне ввода XAML WebView нет курсора, пока я не открою / не закрою Руководство по XBox One? - PullRequest
0 голосов
/ 21 февраля 2019

ОК, у меня на Xbox One работает игра UWP на C ++ / CX / XAML.

В ней есть SwapChainPanel, содержащая оверлей WebView для пользовательского интерфейса и Canvas, где запускается игра.

Когда я запускаю, Webview работает в полноэкранном режиме, а Canvas ничего не делает.Контроллер без проблем перемещается по веб-интерфейсу: вверх / вниз / влево / вправо, «а» для выбора и «b» для возврата / приостановки.Эта навигация осуществляется с помощью API-интерфейса JS Gamepad, а не в режиме мыши.

Проблема возникает, когда я выбираю поле ввода в веб-представлении.Я могу выделить поле, я могу нажать A, я могу уйти, но у меня не появляется курсор в поле, и не появляется программная клавиатура.Это проблема;Я ничего не могу ввести в поле ввода.

Если, однако, я нажимаю кнопку «Xbox» на контроллере, чтобы открыть боковую панель Guide, затем снова нажимаю кнопку «Xbox», чтобы внезапно закрыть ее.курсор появляется в выбранном поле ввода, и нажатие «a» вызывает программную клавиатуру, и все в порядке.С этого момента любое текстовое поле, которое я выбрал, работает абсолютно нормально.

Итак, почему это не работает, когда я впервые загружаю приложение?Что я не делаю, что мне нужно сделать?

Я подозревал, что какая-то проблема с фокусировкой, но использование GotFocusEventHandler () для сообщения о событиях фокусировки просто показывало, что Webview получает фокус при запуске приложения, и то же самое при возврате с боковой панели Guide.Принудительный вызов webView-> Focus (FocusState :: Programmatic);когда поле ввода было подсвечено, у него не было зарегистрированного события фокуса, возможно потому, что веб-просмотр уже был в фокусе.

При дальнейшем исследовании страница работает нормально, если я получаю к ней доступ через URL-адрес HTTP, но не работает, если яиспользовать HTTPS.Я не вижу явных сообщений об ошибках, и обе версии URL-адреса присутствуют в разделе URI содержимого манифеста

1 Ответ

0 голосов
/ 09 апреля 2019

ОК, после долгих исследований и множества тупиков следующий код исправил эту проблему, и я должен предположить, что это ошибка в Edge WebView.

webView->Visibility = Visibility::Collapsed;  
webView->Visibility = Visibility::Visible;    // Yes, I know I just changed this but it needs changing twice.
webView->Focus(FocusState::Programmatic);

Если вы пропустите одну из этих строк,все это не работает.

...