如何在编辑文本软键盘窗口 8 地铁应用程序上隐藏
本文关键字:地铁 应用 应用程序 隐藏 程序上 窗口 键盘 编辑 文本 | 更新日期: 2023-09-27 18:35:14
我在使用 C# 的框架中有一个 EditText 和一个按钮。在编辑字段中写入并单击按钮后,我想隐藏虚拟软键盘。
虚拟按钮并为其设置焦点,键盘将被隐藏。
谢谢你的提问。我有更好的解决方案来解决这个问题。喜欢这个
首先,我们可以在 XAML 中添加处理程序
<Grid x:Name= Tapped="Grid_Tapped_1">
......
</Grid >
然后我们像下面一样关注当前页面。 它工作得很好。
private void Grid_Tapped_1(object sender, TappedRoutedEventArgs e)
{
this.Focus(FocusState.Programmatic);
}
你不能。 有关输入托管管理器和软键盘行为的更多信息,您可以注册以了解它何时显示或隐藏。 但是,您无法以编程方式控制它是启动还是关闭。
当显示虚拟键盘的文本框将其专有的 IsEnabled 设置为 false 时,虚拟键盘将消失。之后我们可以立即将 is 设置为 true,虚拟键盘将保持隐藏状态。就像这样:
MyTextBox.KeyDown += (s, a) => {
if (a.Key == VirtualKey.Enter) {
MyTextBox.IsEnabled = false;
MyTextBox.IsEnabled = true;
}
};
尝试设置 Textbox 的 IsReadOnly
属性。
我正在做一些"类似"的事情
private void textbox_input_LostFocus(object sender, RoutedEventArgs e)
{
textbox_input.IsReadOnly = false;
}
private void textbox_input_Tapped(object sender, TappedRoutedEventArgs e)
{
if(e.PointerDeviceType != Windows.Devices.Input.PointerDeviceType.Mouse)
textbox_input.IsReadOnly = true;
else
textbox_input.IsReadOnly = false;
}
截取此内容后,如果用户不使用鼠标,我会抑制键盘...
此外,KeyDown
事件在文本框为只读时触发,因此您可以直接使用数据来设置视图模型并更新文本框;)
有一种解决方案可以通过在单击按钮为"提交"后自动设置容器的IsTabStop=true
来隐藏触摸键盘。
但是,顺便说一句,我注意到下次进入该页面时,EditText
(应该是TextBox
)将自动聚焦,并显示触摸键盘。也许您最好在提交后禁用EditText
。(似乎完成并阻止输入操作)
我遇到了同样的问题,只是略有不同。当我从文本框切换到日期选择器时,软键盘不会消失。
我尝试了您的所有建议,但没有效果。每次我的日期选择器在我尝试上述解决方案之一(或其他一些堆栈溢出线程)之后都有奇怪的行为。
一段时间后,我通过谷歌找到了一些东西,它就像一个魅力。这里
在评论部分,Dusher16编写了一个非常干净的解决方案,它也适用于WinRT/Win8/Win8.1/Metro或您将如何称呼它。
创建一个新类:
using System.Runtime.InteropServices;
using Windows.Devices.Input;
namespace Your.Namespace
{
public static class TouchKeyboardHelper
{
#region < Attributes >
private const int WmSyscommand = 0x0112; // Flag to received/send messages to the system.
private const int ScClose = 0xF060; // Param to indicate we want to close a system window.
#endregion < Attributes >
#region < Properties >
public static bool KeyboardAttached
{
get { return IsKeyboardAttached(); }
}
#endregion < Properties >
#region < Methods >
[DllImport("user32.dll")]
private static extern int FindWindow(string lpClassName, string lpWindowName); // To obtain an active system window handler.
[DllImport("user32.dll")]
private static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam); // To send a message to the system.
/// <summary>
/// To detect if a real keyboard is attached to the dispositive.
/// </summary>
/// <returns></returns>
private static bool IsKeyboardAttached()
{
KeyboardCapabilities keyboardCapabilities = new KeyboardCapabilities(); // To obtain the properties for the real keyboard attached.
return keyboardCapabilities.KeyboardPresent != 0 ? true : false;
}
/// <summary>
/// To close the soft keyboard
/// </summary>
public static void CloseOnscreenKeyboard()
{
// Retrieve the handler of the window
int iHandle = FindWindow("IPTIP_Main_Window", ""); // To find the soft keyboard window.
if (iHandle > 0)
{
SendMessage(iHandle, WmSyscommand, ScClose, 0); // Send a close message to the soft keyboard window.
}
}
#endregion < Methods >
}
}
例如,在某些 XAML.cs 文件中,添加以下行:
private void DatePicker_GotFocus(object sender, RoutedEventArgs e)
{
if (TouchKeyboardHelper.KeyboardAttached)
TouchKeyboardHelper.CloseOnscreenKeyboard();
}