Вопрос по c#, windows-runtime, xaml – как спрятать на софт-клавиатуре EditText Windows 8 Metro Application?

1

У меня есть EditText и кнопка в моем фрейме с использованием C #. После написания внутри поля редактирования и нажатия кнопки, я хочу скрыть виртуальную программную клавиатуру.

если есть другая альтернатива в этом вопросе. Narasimha
Это невозможно с Win8 CP. Возможное дублирование:stackoverflow.com/questions/10129550/… Jan K.

Ваш Ответ

7   ответов
2

в котором показана виртуальная клавиатура, для свойства IsEnabled установлено значение false, виртуальная клавиатура исчезает. После этого мы можем сразу установить значение true, и виртуальная клавиатура останется скрытой. Именно так:

MyTextBox.KeyDown += (s, a) => {
    if (a.Key == VirtualKey.Enter) {
        MyTextBox.IsEnabled = false;
        MyTextBox.IsEnabled = true;
    }
};
2

Менеджер хостинга ввода и программная клавиатура и ты можешьЗарегистрируйтесь, чтобы узнать, когда он появится или станет скрытым, Но вы не можете программно контролировать, поднимается ли он или падает.

Error: User Rate Limit Exceeded
0

IsReadOnly свойство Textbox`.

Я делаю что-то "похожее"

    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 Событие запускается, пока текстовое поле доступно только для чтения, поэтому вы можете использовать данные напрямую, чтобы установить свою модель представления и обновить поверх нее свое текстовое поле;)

7

и клавиатура будет скрыта.

Error: User Rate Limit ExceededIsTabStop="true"Error: User Rate Limit ExceededHeight/WidthError: User Rate Limit Exceeded"0"Error: User Rate Limit ExceededVisibility="Collapsed"Error: User Rate Limit Exceeded
3

У меня есть лучшее решение для этой проблемы. как это

Сначала мы можем добавить обработчик в XAML

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

тогда мы фокусируем текущую страницу, как следовать. это работает хорошо.

private void Grid_Tapped_1(object sender, TappedRoutedEventArgs e)
        {
            this.Focus(FocusState.Programmatic);
        }
0

Там это решение, которое может скрыть сенсорную клавиатуру, установив контейнерыIsTabStop=true автоматически после нажатия на кнопку «Отправить».

Но, между прочим, я заметил, что при следующем входе на эту страницуEditText (должен бытьTextBox) будет автоматически фокусироваться и отображать сенсорную клавиатуру. Может быть, вам лучше отключитьEditText после отправки. (кажется, чтобы закончить и заблокировать операцию ввода)

0

Когда я переключился с текстового поля на средство выбора даты, софт-клавиатура не исчезла.

Я испробовал все ваши предложения, но ничего не получилось, как должно. Каждый раз, когда мой DatePicker имел странное поведение, после того, как я попробовал одно из вышеуказанных решений (или некоторые другие потоки stackoverflow).

Через некоторое время я нашел что-то через Google, которое работало как шарм.ВОТ

В разделе комментариев Dusher16 написал очень чистое решение, которое работает также для WinRT / Win8 / Win8.1 / Metro или как вы его называете.

Create a new class:

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 >
    }
}

And in for example some XAML.cs file you add the following lines:

private void DatePicker_GotFocus(object sender, RoutedEventArgs e)
{
    if (TouchKeyboardHelper.KeyboardAttached)
        TouchKeyboardHelper.CloseOnscreenKeyboard();
}

Похожие вопросы