Реакция на наличие сенсорной клавиатуры
Узнайте, как настроить пользовательский интерфейс приложения при отображении или скрытии сенсорной клавиатуры.
Важные API
Сенсорный клавиатура в режиме макета по умолчанию
Сенсорный клавиатура позволяет вводить текст для устройств, поддерживающих сенсорный ввод. Элементы управления вводом текста в приложении Windows вызывают сенсорную клавиатуру по умолчанию, когда пользователь нажимает на редактируемое поле ввода. Сенсорная клавиатура обычно остается видимой, пока пользователь перемещается между элементами управления в форме, но это поведение может отличаться в зависимости от других типов элементов управления в форме.
Для поддержки соответствующего поведения сенсорной клавиатуры в пользовательском элементе управления вводом текста, который не является производным от стандартного элемента управления вводом текста, необходимо использовать класс AutomationPeer для предоставления элементов управления Microsoft модель автоматизации пользовательского интерфейса и реализации правильности. модель автоматизации пользовательского интерфейса шаблонов элементов управления. Дополнительные сведения см. в разделе "Специальные возможности клавиатуры" и "Пользовательские одноранговые узлы автоматизации".
После добавления этой поддержки в пользовательский элемент управления можно соответствующим образом реагировать на наличие сенсорной клавиатуры.
Необходимые условия:
В этом разделе описано взаимодействие с клавиатурой.
Вы должны иметь базовое представление о стандартном взаимодействии с клавиатурой, обработке ввода и событий клавиатуры, а также модель автоматизации пользовательского интерфейса.
Если вы не знакомы с разработкой приложений Windows, ознакомьтесь с этими разделами, чтобы ознакомиться с технологиями, описанными здесь.
- Создание своего первого приложения
- Общие сведения о событиях с помощью событий и перенаправленных событий
Рекомендации по работе с пользователем:
Полезные советы по проектированию полезного и привлекательного приложения, оптимизированного для ввода клавиатуры, см. в разделе "Взаимодействие с клавиатурой ".
Сенсорная клавиатура и пользовательский интерфейс
Ниже приведены несколько основных рекомендаций для пользовательских элементов управления вводом текста.
Отображение сенсорной клавиатуры во всем взаимодействии с формой.
Убедитесь, что пользовательские элементы управления имеют соответствующий модель автоматизации пользовательского интерфейса AutomationControlType, чтобы клавиатура сохранялась при переходе фокуса из поля ввода текста в контексте записи текста. Например, если у вас есть меню, открытое в середине сценария ввода текста, и вы хотите сохранить клавиатуру, меню должно иметь AutomationControlType меню меню.
Не управляйте свойствами модель автоматизации пользовательского интерфейса для управления сенсорной клавиатурой. Другие средства специальных возможностей зависят от точности свойств модель автоматизации пользовательского интерфейса.
Убедитесь, что пользователи всегда могут видеть поле ввода, с которым они взаимодействуют.
Так как сенсорный клавиатура occludes большой части экрана, Windows гарантирует, что поле ввода с фокусом прокручивается в представлении, как пользователь перемещается по элементам управления в форме, включая элементы управления, которые в настоящее время не находятся в представлении.
При настройке пользовательского интерфейса укажите аналогичное поведение при появлении сенсорной клавиатуры, обрабатывая события отображения и скрытия , предоставляемые объектом InputPane .
В некоторых случаях есть элементы пользовательского интерфейса, которые должны оставаться на экране в течение всего времени. Создайте пользовательский интерфейс таким образом, чтобы элементы управления формами содержали в области сдвига, а важные элементы пользовательского интерфейса являются статическими. Например:
Обработка событий отображения и скрытия
Ниже приведен пример подключения обработчиков событий для отображения и скрытия событий сенсорной клавиатуры.
using Windows.UI.ViewManagement;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Windows.Foundation;
using Windows.UI.Xaml.Navigation;
namespace SDKTemplate
{
/// <summary>
/// Sample page to subscribe show/hide event of Touch Keyboard.
/// </summary>
public sealed partial class Scenario2_ShowHideEvents : Page
{
public Scenario2_ShowHideEvents()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
InputPane currentInputPane = InputPane.GetForCurrentView();
// Subscribe to Showing/Hiding events
currentInputPane.Showing += OnShowing;
currentInputPane.Hiding += OnHiding;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
InputPane currentInputPane = InputPane.GetForCurrentView();
// Unsubscribe from Showing/Hiding events
currentInputPane.Showing -= OnShowing;
currentInputPane.Hiding -= OnHiding;
}
void OnShowing(InputPane sender, InputPaneVisibilityEventArgs e)
{
LastInputPaneEventRun.Text = "Showing";
}
void OnHiding(InputPane sender, InputPaneVisibilityEventArgs e)
{
LastInputPaneEventRun.Text = "Hiding";
}
}
}
...
#include <winrt/Windows.UI.ViewManagement.h>
...
private:
winrt::event_token m_showingEventToken;
winrt::event_token m_hidingEventToken;
...
Scenario2_ShowHideEvents::Scenario2_ShowHideEvents()
{
InitializeComponent();
}
void Scenario2_ShowHideEvents::OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs const& e)
{
auto inputPane{ Windows::UI::ViewManagement::InputPane::GetForCurrentView() };
// Subscribe to Showing/Hiding events
m_showingEventToken = inputPane.Showing({ this, &Scenario2_ShowHideEvents::OnShowing });
m_hidingEventToken = inputPane.Hiding({ this, &Scenario2_ShowHideEvents::OnHiding });
}
void Scenario2_ShowHideEvents::OnNavigatedFrom(Windows::UI::Xaml::Navigation::NavigationEventArgs const& e)
{
auto inputPane{ Windows::UI::ViewManagement::InputPane::GetForCurrentView() };
// Unsubscribe from Showing/Hiding events
inputPane.Showing(m_showingEventToken);
inputPane.Hiding(m_hidingEventToken);
}
void Scenario2_ShowHideEvents::OnShowing(Windows::UI::ViewManagement::InputPane const& /*sender*/, Windows::UI::ViewManagement::InputPaneVisibilityEventArgs const& /*args*/)
{
LastInputPaneEventRun().Text(L"Showing");
}
void Scenario2_ShowHideEvents::OnHiding(Windows::UI::ViewManagement::InputPane const& /*sender*/, Windows::UI::ViewManagement::InputPaneVisibilityEventArgs const& /*args*/)
{
LastInputPaneEventRun().Text(L"Hiding");
}
#include "pch.h"
#include "Scenario2_ShowHideEvents.xaml.h"
using namespace SDKTemplate;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::UI::ViewManagement;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Navigation;
Scenario2_ShowHideEvents::Scenario2_ShowHideEvents()
{
InitializeComponent();
}
void Scenario2_ShowHideEvents::OnNavigatedTo(NavigationEventArgs^ e)
{
auto inputPane = InputPane::GetForCurrentView();
// Subscribe to Showing/Hiding events
showingEventToken = inputPane->Showing +=
ref new TypedEventHandler<InputPane^, InputPaneVisibilityEventArgs^>(this, &Scenario2_ShowHideEvents::OnShowing);
hidingEventToken = inputPane->Hiding +=
ref new TypedEventHandler<InputPane^, InputPaneVisibilityEventArgs^>(this, &Scenario2_ShowHideEvents::OnHiding);
}
void Scenario2_ShowHideEvents::OnNavigatedFrom(NavigationEventArgs^ e)
{
auto inputPane = Windows::UI::ViewManagement::InputPane::GetForCurrentView();
// Unsubscribe from Showing/Hiding events
inputPane->Showing -= showingEventToken;
inputPane->Hiding -= hidingEventToken;
}
void Scenario2_ShowHideEvents::OnShowing(InputPane^ /*sender*/, InputPaneVisibilityEventArgs^ /*args*/)
{
LastInputPaneEventRun->Text = L"Showing";
}
void Scenario2_ShowHideEvents::OnHiding(InputPane^ /*sender*/, InputPaneVisibilityEventArgs ^ /*args*/)
{
LastInputPaneEventRun->Text = L"Hiding";
}
Связанные статьи
- Взаимодействие с помощью клавиатуры
- Специальные возможности клавиатуры
- Настраиваемые одноранговые классы автоматизации
Примеры
Архивные примеры
Windows developer