Подтвердить что ты не робот

Windows 8 - Как убрать сенсорную клавиатуру?

Я разрабатываю свое приложение для Windows 8 на С#, и очень неприятно то, что сенсорная клавиатура иногда остается на экране, несмотря на то, что все текстовые поля потеряли фокус.

Я прочитал статью белую бумагу с отладкой клавиатуры, которая объясняет, что при переключении с управления на управление клавиатура может оставаться включенной, даже если управление может не принимать ввод с клавиатуры. Это было бы моим делом, потому что все мое содержимое размещено либо в GridView, либо в ListView. Когда пользователь нажимает на любой элемент на экране, кран будет приземляться на эти элементы управления. Это очень раздражает, потому что клавиатура занимает половину экрана, и нет возможности закрыть клавиатуру.

Я попытался отключить текстовое поле, и оно не повлияло. Единственный способ удалить клавиатуру - установить фокус на кнопку, которая чрезвычайно взламывается.

Я думал, что мне нужно что-то сделать с помощью "AutomationPeer", но я не совсем понимаю, что именно делать. Есть ли способ отменить это поведение?

Edit: Я понял это. Цель состоит в том, чтобы изменить тип управления элементом GridView и GridView, не указанным в техническом документе. Вот код сетки, который я сделал, что позволило мне отключить клавиатуру:

public class KeyboardUnfocusableGridView : GridView
{
    private class KeyboardUnfocusableGridViewAutomationPeer : GridViewAutomationPeer
    {
        public KeyboardUnfocusableGridViewAutomationPeer(GridView owner)
            : base(owner)
        {
        }

        protected override AutomationControlType GetAutomationControlTypeCore()
        {
            return AutomationControlType.Custom;
        }

    }

    private class KeyboardUnfocusableGridViewItemAutomationPeer : GridViewItemAutomationPeer
    {
        public KeyboardUnfocusableGridViewItemAutomationPeer(GridViewItem owner)
            : base(owner)
        { }

        protected override AutomationControlType GetAutomationControlTypeCore()
        {
            return AutomationControlType.Custom;
        }

    }

    private class KeyboardUnfocusableGridViewItem : GridViewItem
    {
        protected override AutomationPeer OnCreateAutomationPeer()
        {
            var baseItem = base.OnCreateAutomationPeer();
            return new KeyboardUnfocusableGridViewItemAutomationPeer(this);
        }


    }

    protected override AutomationPeer OnCreateAutomationPeer()
    {
        var baseItem = base.OnCreateAutomationPeer();
        return new KeyboardUnfocusableGridViewAutomationPeer(this);
    }

    protected override Windows.UI.Xaml.DependencyObject GetContainerForItemOverride()
    {
        return new KeyboardUnfocusableGridViewItem();
    }
}

К сожалению, мне нужно написать этот код, чтобы сделать простую вещь. Это определенно не оптимально, так как мне нужно будет сделать это для каждого из ItemsControl, которое мне нужно использовать.

4b9b3361

Ответ 1

Что вам нужно сделать, это настроить фокус на любой элемент управления, который не принимает текстовую запись. Однако имейте в виду, что если пользователь вручную показал клавиатуру (в отличие от нее, автоматически показывающей, поскольку TextBox получил фокус), клавиатура останется открытой.

Посмотрите этот действительно хороший поток о экранной клавиатуре для получения дополнительной информации:

http://social.msdn.microsoft.com/Forums/pl/winappswithcsharp/thread/3c227262-1d2c-4382-9c50-5b71d2b5d823