Merespons kehadiran keyboard sentuh

Pelajari cara menyesuaikan UI aplikasi Anda saat menampilkan atau menyembunyikan keyboard sentuh.

API penting

The touch keyboard in default layout mode.

Keyboard sentuh dalam mode tata letak default

Keyboard sentuh memungkinkan entri teks untuk perangkat yang mendukung sentuhan. Kontrol input teks aplikasi Windows memanggil keyboard sentuh secara default saat pengguna mengetuk bidang input yang dapat diedit. Keyboard sentuh biasanya tetap terlihat saat pengguna menavigasi antar kontrol dalam formulir, tetapi perilaku ini dapat bervariasi berdasarkan jenis kontrol lain dalam formulir.

Untuk mendukung perilaku keyboard sentuh yang sesuai dalam kontrol input teks kustom yang tidak berasal dari kontrol input teks standar, Anda harus menggunakan kelas AutomationPeer untuk mengekspos kontrol Anda ke Microsoft UI Automation dan menerapkan pola kontrol Automasi UI yang benar. Lihat Aksesibilitas keyboard dan Rekan otomatisasi kustom.

Setelah dukungan ini ditambahkan ke kontrol kustom, Anda dapat merespons dengan tepat keberadaan keyboard sentuh.

Prasyarat:

Topik ini dibangun berdasarkan interaksi Keyboard.

Anda harus memiliki pemahaman dasar tentang interaksi keyboard standar, menangani input dan peristiwa keyboard, dan Automasi UI.

Jika Anda baru mengembangkan aplikasi Windows, lihat topik-topik ini untuk memahami teknologi yang dibahas di sini.

Panduan pengalaman pengguna:

Untuk tips bermanfaat tentang merancang aplikasi yang berguna dan menarik yang dioptimalkan untuk input keyboard, lihat Interaksi keyboard .

Keyboard sentuh dan UI kustom

Berikut adalah beberapa rekomendasi dasar untuk kontrol input teks kustom.

  • Tampilkan keyboard sentuh di seluruh interaksi dengan formulir Anda.

  • Pastikan kontrol kustom Anda memiliki Automation Automation AutomationControlType UI yang sesuai untuk keyboard agar tetap ada saat fokus berpindah dari bidang input teks saat berada dalam konteks entri teks. Misalnya, jika Anda memiliki menu yang dibuka di tengah skenario entri teks, dan Anda ingin keyboard tetap ada, menu harus memiliki AutomationControlType dari Menu.

  • Jangan memanipulasi properti Automation UI untuk mengontrol keyboard sentuh. Alat aksesibilitas lainnya mengandalkan akurasi properti Automation UI.

  • Pastikan bahwa pengguna selalu dapat melihat bidang input yang berinteraksi dengan mereka.

    Karena keyboard sentuh menempati sebagian besar layar, Windows memastikan bahwa bidang input dengan fokus bergulir ke tampilan saat pengguna menavigasi melalui kontrol pada formulir, termasuk kontrol yang saat ini tidak terlihat.

    Saat menyesuaikan UI Anda, berikan perilaku serupa pada tampilan keyboard sentuh dengan menangani peristiwa Menampilkan dan Menyembunyikan yang diekspos oleh objek InputPane .

    a form with and without the touch keyboard showing

    Dalam beberapa kasus, ada elemen UI yang harus tetap berada di layar sepanjang waktu. Rancang UI sehingga kontrol formulir terkandung dalam wilayah panning dan elemen UI penting statis. Misalnya:

    a form that contains areas that should always stay in view

Menangani peristiwa Menampilkan dan Menyembunyikan

Berikut adalah contoh melampirkan penanganan aktivitas untuk acara Menampilkan dan Menyembunyikan keyboard sentuh.

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

Sampel

Sampel arsip