我正在尝试使用 ANGLE API 让 InputPane 触摸键盘在通用 Windows 应用程序中正确显示。(我在 Android 本机应用程序中使用 OpenGL 编写了一些自定义输入控件,我将它们移植到 UWP 应用程序。)
一切都按预期工作,除了触摸键盘(正确接收所有指针输入,如果我连接硬件键盘,键盘交互很好)。我可以让 InputPane 显示,但它会立即从屏幕上消失。
这是我与 InputPane 相关的所有代码:
void App::SetWindow(CoreWindow^ window)
{
...
InputPane ^input_pane = InputPane::GetForCurrentView();
input_pane->Showing += ref new TypedEventHandler<InputPane^, InputPaneVisibilityEventArgs^>(this, &App::OnInputPaneShowing);
input_pane->Hiding += ref new TypedEventHandler<InputPane^, InputPaneVisibilityEventArgs^>(this, &App::OnInputPaneHiding);
auto core_text_manager = CoreTextServicesManager::GetForCurrentView();
auto core_text = core_text_manager->CreateEditContext();
core_text->InputPaneDisplayPolicy = CoreTextInputPaneDisplayPolicy::Manual;
}
void App::OnInputPaneShowing(InputPane^ sender, InputPaneVisibilityEventArgs^ args)
{
args->EnsuredFocusedElementInView = true;
}
void App::OnInputPaneHiding(InputPane^ sender, InputPaneVisibilityEventArgs^ args)
{
args->EnsuredFocusedElementInView = true;
}
像这个这样的几个 SO 问题只是建议调用 InputPane::TryShow(),但我已经这样做了。InputPane 正在出现,它只是立即消失(这样做时不会生成隐藏事件)。
根据其他 SO 问题中的建议,我尝试将 EnsuredFocusedElementInView 设置为 true,尽管这更像是在黑暗中拍摄,因为我的应用程序中实际上没有任何 Control 对象。将显示策略设置为手动(如图所示)而不是自动产生相同的结果。
无论应用程序是全屏还是窗口,在桌面和平板电脑模式下都会发生此行为。没有连接硬件键盘。从任务栏图标调用键盘,然后与应用程序交互会导致键盘像以前一样立即消失。
如果有人有任何想法,他们将不胜感激。谢谢你。