1

我使用 C# 在我的框架中有一个 EditText 和一个按钮。在编辑字段中写入并单击按钮后,我想隐藏虚拟软键盘。

4

7 回答 7

7

添加一个虚拟按钮并将焦点设置为它,键盘将被隐藏。

于 2012-09-17T11:53:50.273 回答
3

谢谢你的问题。我已经为这个问题找到了更好的解决方案。像这样

首先我们可以在 xaml 中添加处理程序

<Grid x:Name= Tapped="Grid_Tapped_1">
  ......
 </Grid >

然后我们关注当前页面,如下所示。它运作良好。

private void Grid_Tapped_1(object sender, TappedRoutedEventArgs e)
        {
            this.Focus(FocusState.Programmatic);
        }
于 2013-06-10T02:46:29.787 回答
2

你不能。有关于Input Hosting Manager 和 Soft Keyboard行为的更多信息,您可以注册以了解它何时显示或隐藏。但是,您无法以编程方式控制它是向上还是向下。

于 2012-05-24T18:22:48.127 回答
2

当显示虚拟键盘的文本框将其属性 IsEnabled 设置为 false 时,虚拟键盘就会消失。之后我们可以立即将 is 设置为 true,虚拟键盘将保持隐藏状态。像这样:

MyTextBox.KeyDown += (s, a) => {
    if (a.Key == VirtualKey.Enter) {
        MyTextBox.IsEnabled = false;
        MyTextBox.IsEnabled = true;
    }
};
于 2014-05-02T20:13:23.683 回答
0

尝试设置IsReadOnlyTextbox` 的属性。

我正在做一些“类似”的事情

    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当文本框为只读时触发事件,因此您可以直接使用数据来设置您的视图模型并更新您的文本框;)

于 2012-06-25T18:34:07.247 回答
0

IsTabStop=true一个解决方案可以通过在单击按钮后自动设置容器为“提交”来隐藏触摸键盘。

但是,顺便说一句,我注意到下次进入该页面时,EditText(应该是 a TextBox)将自动聚焦,并显示触摸键盘。也许你最好EditText在提交后禁用。(似乎完成并阻止了输入操作)

于 2015-03-25T01:34:32.347 回答
0

我有同样的问题,只有一点点不同。当我从文本框切换到日期选择器时,软键盘不会消失。

我尝试了您的所有建议,但没有任何效果。每次我的日期选择器出现奇怪的行为时,在我尝试了上述解决方案之一(或其他一些 stackoverflow 线程)之后。

过了一段时间,我通过谷歌找到了一些东西,这就像一个魅力。这里

在评论部分 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();
}
于 2016-10-11T10:13:11.913 回答