根据触摸键盘文档,触摸键盘显示和隐藏行为旨在跨应用程序保持一致 - 让用户保持关注。这就是为什么在Windows.UI.ViewManagement.InputPane 类上没有显示和隐藏方法的原因。
这个触摸键盘白皮书描述了细节,并指出了为什么在输入元素之间导航/切换时保持键盘的行为是这样设计的。
还有一组控件可以在文本输入流期间接收焦点但不可编辑。触摸键盘不会不必要地搅动 UI 并可能使用户在流程中间迷失方向,而是保持在控件的视图中,因为用户可能会在控件和使用触摸键盘的文本输入之间来回切换。因此,如果键盘已经显示并且焦点落在以下列表中类型之一的控件上,则键盘将不会隐藏自身。但是,如果键盘尚未显示,它不会显示自己,除非点击落在可编辑区域上。
总之,根据指南 - 应用程序应保留默认触摸键盘。在尝试更改默认行为之前,请三思而后行。
如果您遇到的情况确实不适合使用键盘,则白皮书还提供了解决方法的线索(非预期)。可以以编程方式将焦点暂时放在不可编辑的元素(比如按钮)上,键盘将自行隐藏。但是由于程序化的焦点转移,选择控件将错过点击事件,并且需要再次点击才能打开其下拉菜单。可能需要付出更多努力,才能改进此解决方法。但同样,这是一种解决方法,应该明智地使用。
_initializeEventHandlers: function initializeEventHandlers()
{
myField2.addEventListener('focus', this._onfocus.bind(this));
},
_onfocus: function onfocus(event)
{
console.log('on focus invoked');
if (this._movingFocusInProgress)
{
this._movingFocusInProgress = false;
return;
}
this._movingFocusInProgress = true;
b1.focus();
WinJS.Promise.timeout(200).then(function ()
{
myField2.focus();
});
},
HTML 需要有这个零大小的按钮。
<input id="myField1" type="number" />
<select id="myField2" role="banner">
<option value="one">One</option>
<option value="two">Two</option>
<option value="three">Three</option>
</select>
<button id="b1" style="visibility:visible; border-width:0;
border-color:transparent;outline-color:transparent; min-width:0; min-height:0"></button>