Pengantar aksesibilitas aplikasi Windows — bersiap untuk UI Automation dan persyaratan akomodasi wajar

· · Aksesibilitas, UI Automation, Windows, WinForms, WPF, Akomodasi wajar, Pembaca layar, Undang-undang diskriminasi disabilitas, Aplikasi bisnis

“Rekrutmen mid-career yang tunanetra tidak dapat memakai aplikasi entri pesanan inti dengan pembaca layar. Mereka memakai peramban web dan surat tanpa kesulitan, tetapi hanya pembacaan aplikasi bisnis kita yang tidak bekerja dengan benar. Bisakah sesuatu dilakukan?” — Konsultasi semacam ini dari departemen IT pelanggan semakin meningkat.

Satu latar belakang adalah kerangka hukum. Amandemen 2021 terhadap Undang-Undang Penghapusan Diskriminasi terhadap Penyandang Disabilitas berlaku pada 1 April 2024, dan “penyediaan akomodasi wajar” kepada penyandang disabilitas menjadi kewajiban bagi pelaku usaha juga.1 Lebih jauh, hubungan karyawan–perusahaan seperti yang di pembuka (bidang ketenagakerjaan) adalah ranah Undang-Undang Promosi Ketenagakerjaan Penyandang Disabilitas, yang telah mewajibkan pemberi kerja menyediakan akomodasi wajar sejak April 2016.2 Gagasan bahwa “aksesibilitas adalah topik situs web dan tidak ada hubungannya dengan aplikasi Windows internal” tidak lagi bertahan, baik secara hukum maupun dalam praktik.

Di sisi lain, dari lantai pengembangan, “kita tidak tahu harus berbuat apa” adalah tempat yang jujur. Aksesibilitas untuk aplikasi desktop Windows punya lebih sedikit informasi daripada Web, dan tidak ada solusi ajaib setelah-fakta. Tidak perlu pesimis juga. Jika Anda memahami mekanisme yang dipakai pembaca layar untuk membaca aplikasi (UI Automation) dan menyerap dasar nama, keyboard, dan warna, kegunaan aplikasi bisnis meningkat secara substansial. Dan banyak dari itu adalah perbaikan yang menaikkan produktivitas setiap pengguna, dengan atau tanpa disabilitas.

Ditujukan kepada pengembang aplikasi bisnis Jepang dan staf IT, artikel ini menghubungkan dalam satu lintasan dari pemilahan minimum kerangka hukum dan standar, lewat mekanisme UI Automation, implementasi di WinForms/WPF, operasi keyboard, warna dan kontras, serta alat verifikasi, sampai cara realistis menetapkan prioritas.

Alur artikel iniStruktur artikel ini, menghubungkan secara berurutan dari pemilahan kerangka hukum dan standar lewat mekanisme UI Automation, implementasi di WinForms dan WPF, operasi keyboard, warna dan kontras, alat verifikasi, dan cara menetapkan prioritasPemilahan kerangka hukum dan standarMekanisme UI AutomationImplementasi di WinForms/WPFOperasi keyboardWarna dan kontrasAlat verifikasiCara menetapkan prioritas

Gambar 1: Artikel ini menghubungkan kerangka hukum lewat mekanisme, implementasi, verifikasi, dan prioritas dalam satu alur.

1. Kesimpulan lebih dulu

  • Penyediaan akomodasi wajar telah menjadi kewajiban bagi pelaku usaha juga sejak 1 April 2024. Ketika penyandang disabilitas menyatakan niat agar hambatan dihapus, respons dalam rentang yang bukan beban berlebihan diperlukan. Bidang ketenagakerjaan di bawah Undang-Undang Promosi Ketenagakerjaan Penyandang Disabilitas, dan itu telah menjadi kewajiban pemberi kerja sejak April 2016.12
  • Akomodasi wajar adalah proses “merespons permintaan individual lewat dialog konstruktif”; membuat aplikasi lebih mudah dipakai di muka adalah “perbaikan lingkungan” (kewajiban upaya). Dukungan sempurna di muka bukan kewajibannya; yang penting adalah tidak menolak dialog secara sepihak.1
  • Kriteria teknis aksesibilitas terkonsentrasi di WCAG (JIS X 8341-3:2016). JIS X 8341-3:2016 adalah standar koresponden dengan isi yang sama seperti WCAG 2.0, dan WCAG2ICT milik W3C memberi panduan menerapkannya pada perangkat lunak non-Web. Aplikasi desktop dapat diperiksa dengan pemikiran yang sama.34
  • Pembaca layar membaca aplikasi lewat UI Automation (UIA). Properti yang dipegang setiap elemen pada pohon UIA — Name, ControlType, dan semacamnya — serta pola kontrol seperti Invoke, Value, dan SelectionItem adalah bahan pengumuman dan operasi.5
  • Tombol yang Name-nya kosong diumumkan hanya sebagai “tombol”. Perbaikan prioritas tertinggi adalah penamaan. WinForms memakai AccessibleName dan mengaitkan Label dengan urutan tab; WPF memakai AutomationProperties.Name/LabeledBy.67
  • Dapat mencapai setiap fungsi dari keyboard saja adalah kriteria keberhasilan WCAG (2.1.1) dan, pada saat yang sama, kecepatan input operator terampil itu sendiri. Memasang urutan tab, access key, dan indikasi fokus terhubung langsung ke efisiensi setiap pengguna.8
  • Ambil rasio kontras teks 4,5:1 atau lebih sebagai panduan, dan jangan sampaikan informasi hanya lewat warna. Dalam tema kontras (kontras tinggi), hormati warna sistem daripada warna yang di-hard-code.89
  • Gabungkan verifikasi dengan FastPass di Accessibility Insights for Windows dan pemeriksaan langsung dengan pembaca layar. Karena mereka duduk pada fondasi UIA yang sama, pekerjaan ini juga saling menguntungkan dengan aset pengujian otomatis UI seperti FlaUI.10
  • Anda tidak perlu memperbaiki setiap layar sekaligus. Urutan realistis adalah (1) dari layar yang dipakai pengguna itu, (2) pengembangan baru patuh standar, (3) gulirkan ke samping dengan memperbaiki kontrol bersama.

Dalam satu kalimat: dukungan aksesibilitas adalah “mengekspos nama dan operasi yang benar pada pohon UIA, dan menjaga dasar keyboard serta warna”.

2. Memilah kerangka hukum dan standar — apa yang “menjadi kewajiban” berubah

2.1. Undang-Undang Penghapusan Diskriminasi terhadap Penyandang Disabilitas — dari April 2024, pelaku usaha juga diwajibkan menyediakan akomodasi wajar

Undang-Undang Penghapusan Diskriminasi terhadap Penyandang Disabilitas adalah undang-undang yang melarang “perlakuan diskriminatif yang tidak adil” terhadap penyandang disabilitas oleh organ administratif dan pelaku usaha, serta mensyaratkan “penyediaan akomodasi wajar”. Dalam amandemen 2021 (Reiwa 3), penyediaan akomodasi wajar oleh pelaku usaha, yang tadinya kewajiban upaya, menjadi kewajiban, dan undang-undang yang diamandemen berlaku pada 1 April 2024 (Reiwa 6).1

Menurut leaflet Cabinet Office, penyediaan akomodasi wajar adalah merespons, dalam rentang yang bukan beban berlebihan, ketika penyandang disabilitas menyatakan niat bahwa suatu respons dibutuhkan untuk menghapus hambatan di masyarakat. Dan karena isinya berbeda menurut karakteristik disabilitas, adegan, dan situasi, sebuah “dialog konstruktif” di mana penyandang disabilitas dan pelaku usaha menumpuk dialog dan mempertimbangkan respons bersama ditekankan. Menolak dialog konstruktif secara sepihak dinyatakan berpotensi merupakan pelanggaran kewajiban menyediakan akomodasi wajar.1

Dua pembedaan praktis penting di sini.

  1. “Memiliki semuanya di tempat di muka” bukan yang menjadi kewajiban. Langkah perbaikan di muka yang ditujukan kepada jumlah tak tertentu penyandang disabilitas — sisi lunak seperti meninjau ulang manual dan pelatihan, sisi keras seperti membuat fasilitas bebas hambatan — disebut “perbaikan lingkungan”, dan ini adalah kewajiban upaya.1 Menaruh aplikasi bisnis dalam keadaan dapat dipakai dengan pembaca layar di muka dapat dipikirkan sebagai upaya perbaikan lingkungan. Semakin jauh perbaikan lingkungan telah pergi, semakin ringan beban menyediakan akomodasi wajar individual.
  2. Bidang ketenagakerjaan tidak di bawah Undang-Undang Penghapusan Diskriminasi terhadap Penyandang Disabilitas melainkan di bawah Undang-Undang Promosi Ketenagakerjaan Penyandang Disabilitas. Leaflet yang sama juga menyatakan bahwa ketenagakerjaan dan kerja mengikuti ketentuan Undang-Undang Promosi Ketenagakerjaan Penyandang Disabilitas.1 Dan di bawah undang-undang itu, lewat amandemen yang berlaku April 2016 (Heisei 28), larangan diskriminasi disabilitas dalam ketenagakerjaan dan penyediaan akomodasi wajar dalam rentang yang bukan beban berlebihan telah diwajibkan bagi pemberi kerja.2 Konsultasi pembuka “seorang karyawan tidak dapat memakai aplikasi bisnis” pada kenyataannya sudah lama berada di ranah kewajiban jauh sebelum 2024.
Posisi akomodasi wajar dan perbaikan lingkunganHubungan antara pelaku usaha umum dan penyandang disabilitas di bawah Undang-Undang Penghapusan Diskriminasi terhadap Penyandang Disabilitas, dan menyediakan akomodasi wajar dengan merespons permintaan individual lewat dialog konstruktif telah menjadi kewajiban sejak April 2024; bidang ketenagakerjaan telah menjadi kewajiban pemberi kerja sejak April 2016 di bawah Undang-Undang Promosi Ketenagakerjaan Penyandang Disabilitas; membuat aplikasi lebih mudah dipakai di muka adalah perbaikan lingkungan, kewajiban upayaUsaha + disabilitasKetenagakerjaan / kerjaAdegan mana?Undang-undang diskriminasiUndang-undang ketenagakerjaanPermintaan lewat dialogSediakan akomodasiKewajiban sejak 2024Sediakan akomodasiKewajiban sejak 2016Aplikasi lebih mudah di mukaPerbaikan lingkungankewajiban upaya

Gambar 2: Undang-undang yang mengatur belah menurut adegan; akomodasi wajar adalah kewajiban, dan perbaikan di muka adalah perbaikan lingkungan, kewajiban upaya.

Bagaimana kasus individual diperlakukan dalam hukum bergantung pada situasinya. Artikel ini tidak masuk ke interpretasi hukum; ia berlanjut dari sudut pandang apa yang dapat dilakukan seorang insinyur ketika respons diminta. Untuk sumber primer, rujuk materi Cabinet Office dan Kementerian Kesehatan, Tenaga Kerja, dan Kesejahteraan.12

2.2. JIS X 8341-3 dan WCAG — “kriteria Web” juga merentang ke perangkat lunak

Di sisi kriteria teknis, mereka terkonsentrasi di JIS X 8341-3:2016. Standar ini adalah standar koresponden ISO/IEC 40500:2012, dan tubuh standarnya adalah isi yang sama seperti WCAG 2.0 milik W3C.3 Jika Anda ingin tahu secara konkret dari apa “dukungan aksesibilitas” terdiri, membaca kriteria keberhasilan WCAG (kini diperluas di WCAG 2.1/2.2) adalah jalur terpendek, dan terjemahan Jepang oleh WAIC juga diterbitkan.8

Pertanyaan “apakah WCAG adalah kriteria untuk konten Web?” adil, tetapi W3C telah menata, dalam Group Note yang disebut WCAG2ICT (Guidance on Applying WCAG 2 to Non-Web Information and Communications Technologies), cara menerapkan kriteria keberhasilan WCAG 2.0/2.1/2.2 pada dokumen dan perangkat lunak non-Web.4 Dengan kata lain, pemikiran seperti “alternatif teks”, “kontras”, “operasi keyboard”, dan “warna bukan satu-satunya sarana” dapat diterapkan pada aplikasi desktop Windows dalam kerangka yang sama seperti Web. Bab 3 dan seterusnya artikel ini menjatuhkan pemikiran itu ke implementasi WinForms/WPF konkret.

Hubungan antara JIS X 8341-3 dan WCAGJIS X 8341-3:2016 adalah standar koresponden dengan isi yang sama seperti WCAG 2.0, dan WCAG2ICT menunjukkan cara menerapkan kriteria keberhasilan WCAG pada perangkat lunak non-Web, jadi aplikasi desktop Windows dapat diperiksa dalam kerangka yang samaStandar koresponden dengan isi yang samaWCAG 2.0(W3C)JIS X 8341-3:2016WCAG2ICTTerapkan pada perangkat lunak non-WebAplikasi desktop Windows

Gambar 3: JIS X 8341-3:2016 adalah standar koresponden WCAG 2.0, dan WCAG2ICT merentangkan kriteria yang sama ke aplikasi desktop.

3. Bagaimana teknologi bantu membaca aplikasi — trio UI Automation

3.1. Pohon UIA, properti, dan pola kontrol

Windows punya fondasi aksesibilitas yang disebut UI Automation (UIA) built-in. UIA adalah mekanisme yang membiarkan teknologi bantu seperti pembaca layar memperoleh informasi UI dan mengoperasikan UI dengan sarana selain input standar, dan ia menengahi antara sisi aplikasi (penyedia) dan sisi teknologi bantu (klien).5

Dunia UIA dapat dipahami sebagai trio berikut.5

Elemen Peran Contoh representatif
Pohon UIA Pohon yang dimulai dari desktop sebagai akar dan berlanjut jendela → kontrol. Teknologi bantu menelusuri pohon ini untuk menangkap UI Jendela, panel, tombol, kotak edit
Properti Nilai yang mewakili sifat setiap elemen Name (tujuan), ControlType (jenis), AutomationId (pengenal), IsEnabled, IsKeyboardFocusable
Pola kontrol Kosakata “operasi yang dapat Anda lakukan” per jenis Invoke (tekan), Value (baca/tulis nilai), SelectionItem (pilih), Toggle (nyala/mati), ExpandCollapse (perluas/ciutkan)

Ketika pembaca layar memfokuskan tombol, pengumuman “tombol Konfirmasi pesanan” secara kasar adalah kombinasi Name + jenis kontrol. Ketika pengguna melakukan operasi “jalankan”, teknologi bantu menekan tombol itu lewat pola Invoke. Dengan kata lain, jika Name dan pola diekspos dengan benar ia dapat dibaca dan dioperasikan; jika tidak diekspos, sama seperti tidak ada bahkan jika terlihat di layar.

Trio UI AutomationAplikasi, sebagai penyedia, mengekspos properti dan pola kontrol setiap elemen pada pohon UIA; pembaca layar, sebagai klien, mengumumkan Name dan ControlType serta beroperasi lewat pola seperti InvokeMengumumkanMengoperasikanAplikasi(penyedia)Pohon UIAProperti(Name, ControlType, dan semacamnya)Pola(Invoke, Value, dan semacamnya)Pembaca layar(klien)

Gambar 4: Pembaca layar memakai properti dan pola yang diekspos aplikasi pada pohon UIA untuk pengumuman dan operasi.

3.2. Pembaca layar adalah klien UIA

Pembaca layar utama yang dipakai di Windows mencakup Narrator, built-in di Windows; NVDA,11 yang gratis dan sumber terbuka; dan PC-Talker, produk komersial yang banyak dipakai di Jepang. Gaya pengumuman berbeda di antara mereka, tetapi jalur primer untuk membaca UI aplikasi desktop adalah UIA dalam setiap kasus. Itulah mengapa respons sisi aplikasi bukan “dukungan untuk pembaca layar tertentu” melainkan berkonsentrasi pada mengekspos informasi yang benar ke UIA.

Jalur bersama pembaca layar utamaJika aplikasi mengekspos informasi yang benar ke UIA, Narrator, NVDA, dan PC-Talker semuanya dapat membaca UI lewat jalur yang sama, jadi respons sisi aplikasi tidak ditujukan pada pembaca layar tertentu melainkan berkonsentrasi pada mengekspos ke UIAMengekspos informasiAplikasiUI Automation(UIA)NarratorNVDAPC-TalkerRespons berkonsentrasi pada mengekspos ke UIA

Gambar 5: Pembaca layar utama semuanya mengambil UIA sebagai jalur, jadi respons aplikasi berkonsentrasi pada mengekspos ke UIA.

3.3. “Tombol yang Name-nya kosong” diumumkan sebagai apa?

Satu contoh konkret. Misalkan toolbar punya tombol Simpan yang hanya menampilkan ikon floppy-disk. Bagi pengguna yang melihat, ikon menyampaikan makna, tetapi jika Name dibiarkan kosong, pembaca layar mengumumkan tombol ini hanya sebagai “tombol”. Jika “Buka” dan “Cetak” di sebelahnya sama, pengguna hanya mendengar “tombol, tombol, tombol” dan tidak punya sarana untuk mengetahui mana yang mana. Panduan perbaikan aksesibilitas Microsoft juga mencantumkan tombol tanpa Name, dan gambar yang diumumkan hanya sebagai “Image”, sebagai masalah representatif yang menghentikan pekerjaan pengguna.7

Untungnya, baik kontrol standar WinForms maupun WPF punya dukungan UIA sejak awal, dan dalam banyak kasus Name diputuskan secara otomatis dari teks atau label. Yang rusak biasanya salah satu dari (1) hanya-ikon, tanpa bahan untuk nama, (2) tidak ada kaitan dengan label, atau (3) gambar kustom yang tidak menaruh informasi pada pohon UIA. Dua bab berikutnya melihat cara memperbaikinya per kerangka.

Tiga cara khas pengumuman rusakPengumuman rusak ketika tidak ada bahan untuk nama karena hanya-ikon, ketika tidak ada kaitan dengan label, atau ketika gambar kustom tidak menaruh informasi pada pohon UIA, dan akhirnya diumumkan hanya sebagai tombolHanya-ikon, tanpa bahanName menjadi kosongTidak ada kaitan dengan labelGambar kustom tidak mengeluarkan informasiDiumumkan hanya sebagai tombol

Gambar 6: Pengumuman yang rusak biasanya turun ke salah satu dari tiga pola: bahan nama tidak cukup, kaitan tidak cukup, atau gambar kustom.

4. Implementasi di WinForms — AccessibleName dan urutan tab

4.1. Kontrol yang Text-nya menjadi Name secara otomatis, dan kontrol yang Text-nya tidak

Di WinForms, kontrol yang menampilkan teks, seperti Button atau CheckBox, memakai nilai properti Text sebagai Name UIA. Di sisi lain, ComboBox, ListBox, ListView, PictureBox, ProgressBar, TabControl, TextBox, TreeView dan semacamnya tidak menjadikan Text sebagai Name. Ini membutuhkan nama dengan sarana lain.6

Cara yang paling mudah dipelihara adalah menempatkan Label deskriptif di urutan tab langsung sebelumnya dari kontrol sasaran. Jika Anda menyetel TabIndex kontrol sasaran agar datang langsung setelah TabIndex Label, teks Label itu dipakai secara otomatis sebagai Name UIA. Label yang terlihat di layar dan pengumuman cocok, dan Anda tidak harus mengelola kata dua kali.612

Jika Anda tidak dapat menempatkan Label, setel AccessibleName secara eksplisit. Anda juga dapat menyetel AccessibleDescription jika penjelasan tambahan dibutuhkan, dan AccessibleRole jika peran berbeda dari tampilan.13

Bagaimana nama kontrol WinForms diputuskanUntuk Button dan semacamnya, Text menjadi Name UIA apa adanya; untuk kontrol seperti TextBox yang Text-nya tidak dipakai ulang, teks Label yang ditempatkan di urutan tab langsung sebelumnya dipakai; jika Anda tidak dapat menempatkan Label, setel AccessibleName secara eksplisitYaTidakYaTidakKontrolJenis yang Text-nya menjadi Name?Text menjadi Name apa adanyaLabel di urutan tab langsung sebelumnya?Teks Label dipakai sebagai NameSetel AccessibleName secara eksplisit

Gambar 7: Untuk Name WinForms, pilih cara memutuskannya dalam urutan Text, Label di urutan tab langsung sebelumnya, AccessibleName.

// An icon-only toolbar button: state the name for announcement explicitly
saveToolStripButton.AccessibleName = "Save";

// An image-only button: name + a supplementary explanation
btnSearchCustomer.AccessibleName = "Search customer";
btnSearchCustomer.AccessibleDescription = "Search the customer master by customer code or name";

// Set it directly on an input field where you cannot place a Label in the immediately preceding tab order
txtOrderNo.AccessibleName = "Order number";

// A PictureBox reused as a chart display: match the role to the reality as well
pictureBoxChart.AccessibleRole = AccessibleRole.Chart;
pictureBoxChart.AccessibleName = "Monthly order-count chart";

Sebagai peringatan, jika Anda menyetel AccessibleName sekali di panel Properties Visual Studio lalu mengosongkannya, pengaturan string-kosong dapat tetap di berkas desainer dan mengganggu resolusi nama bawaan. Hapus baris yang bersesuaian dari berkas desainer.6

Masalah AccessibleName string-kosong yang tertinggalJika Anda menyetel AccessibleName sekali di panel Properties lalu mengosongkannya, pengaturan string-kosong tetap di berkas desainer dan mengganggu resolusi nama bawaan, jadi Anda memperbaikinya dengan menghapus baris yang bersesuaian dari berkas desainerSetel AccessibleNameKosongkan di panel PropertiesPengaturan string-kosong tertinggalMengganggu resolusi nama bawaanHapus baris yang bersesuaian dari berkas desainer

Gambar 8: Mengosongkannya di panel Properties tetap meninggalkan string kosong, jadi Anda memperbaikinya dengan menghapus baris yang bersesuaian dari berkas desainer.

4.2. Perbaikan umum pada layar entri pesanan

Tempat yang sebenarnya sering kami perbaiki di aplikasi bisnis dirangkum sebagai daftar periksa.

Keadaan umum Masalah Cara memperbaikinya
ToolStripButton hanya-ikon Diumumkan hanya sebagai “tombol” Setel AccessibleName
Ada Label dekat TextBox tetapi urutan tab tercerai Nama field input kosong, atau menjadi nama yang tidak terkait Tempatkan field input langsung setelah TabIndex Label
PictureBox dipakai sebagai tombol lewat Click Peran tidak disampaikan sebagai tombol, dan tidak dapat ditekan dari keyboard Ganti dengan Button, atau setel AccessibleRole/AccessibleName plus dukungan keyboard
Header kolom DataGridView kosong atau hanya simbol Makna kolom tidak jelas ketika sel diumumkan Setel nama kolom yang bermakna pada HeaderText
Hanya Panel dipakai untuk mengelompokkan isi, dan heading adalah gambar Anda tidak dapat tahu kelompok input mana itu Pakai GroupBox, atau jadikan heading Label

Masing-masing adalah perbaikan beberapa baris, tetapi bagi pengguna pembaca layar itu cabang antara “layar yang tidak dapat dipakai” dan “layar yang dapat dipakai”.

5. Implementasi di WPF — AutomationProperties dan AutomationPeer

5.1. AutomationProperties.Name / LabeledBy / HelpText

Di WPF, kontrol yang Content-nya adalah string, seperti Button, memakai konten itu sebagai Name UIA. Tombol hanya-ikon (Image atau Path) tidak punya bahan untuk Name, jadi Anda nyatakan dengan AutomationProperties.Name, atau jika ada teks tampilan di dekatnya Anda kaitkan dengan AutomationProperties.LabeledBy.7

TextBox punya peringatan penting. Text milik TextBlock dipakai ulang sebagai Name, tetapi Text milik TextBox diekspos di sisi properti Value UIA dan tidak menjadi Name. Untuk field input, mengaitkan TextBlock label-tampilan dengan LabeledBy adalah kandidat pertama. Pengumuman dan tampilan di layar cocok, dan Anda juga menghindari mengelola kata dua kali.14

<!-- An input field: associate the display label with LabeledBy -->
<TextBlock x:Name="OrderNoLabel" Text="Order number" />
<TextBox
    AutomationProperties.LabeledBy="{Binding ElementName=OrderNoLabel}"
    AutomationProperties.AutomationId="OrderNoTextBox" />

<!-- An icon-only button: state the name, and a supplement if needed -->
<Button
    AutomationProperties.Name="Confirm order"
    AutomationProperties.HelpText="Confirm the order being entered and allocate inventory">
    <Path Data="{StaticResource CheckIconGeometry}" Width="16" Height="16" />
</Button>
Bagaimana nama kontrol WPF diputuskanKontrol yang Content-nya adalah string memakai konten itu sebagai Name; jika tidak, mengaitkan label tampilan di dekatnya dengan LabeledBy adalah kandidat pertama; jika itu juga absen, nyatakan AutomationProperties.Name; Text milik TextBox diekspos di sisi Value, bukan sebagai NameYaTidakYaTidakKontrolApakah Content sebuah string?Konten menjadi NameLabel tampilan di dekatnya?Kaitkan dengan LabeledBySetel Name secara eksplisitText milik TextBoxDiekspos sebagai Value, bukan Name

Gambar 9: Untuk Name WPF, putuskan dalam urutan string Content, LabeledBy, pengaturan eksplisit; Text milik TextBox tidak menjadi Name.

Informasi tambahan yang tidak muat di Name dapat diekspos dengan AutomationProperties.HelpText.7 Juga, AutomationId adalah pengenal yang dipakai untuk identifikasi elemen dalam pengujian otomatis UI, jadi memutuskan konvensi penamaan pada waktu desain layar terbayar nanti (dibahas secara mendalam di “Pengujian otomatis UI untuk aplikasi desktop Windows”).

5.2. Kontrol kustom membutuhkan AutomationPeer

Kontrol kustom yang Anda gambar sendiri tidak dapat, apa adanya, mengekspos informasi yang bermakna pada pohon UIA. Di WPF Anda menimpa OnCreateAutomationPeer pada kelas turunan UIElement dan mengembalikan kelas turunan AutomationPeer untuk mengekspos nama, jenis, dan pola. Jika Anda mewarisi kontrol yang sudah ada, mewarisi Peer yang bersesuaian (ButtonBaseAutomationPeer untuk ButtonBase) membiarkan Anda mengambil alih perilaku yang sudah diimplementasikan.15

Bagaimana informasi diekspos lewat AutomationPeerKontrol kustom mengekspos nama, jenis, dan pola dengan menimpa OnCreateAutomationPeer dan mengembalikan kelas turunan AutomationPeer; jika Anda mewarisi kontrol yang sudah ada, warisi Peer yang bersesuaian dan ambil alih perilaku yang sudah diimplementasikanKontrol kustomOnCreateAutomationPeerKembalikan kelas turunan PeerEkspos nama, jenis, dan polaWarisi kontrol yang sudah adaWarisi Peer yang bersesuaianAmbil alih perilaku yang sudah diimplementasikan

Gambar 10: Kontrol kustom mengembalikan Peer dari OnCreateAutomationPeer dan mengekspos informasi ke UIA.

// An example of a control that custom-draws line status as a coloured lamp
public class StatusLamp : Control
{
    public static readonly DependencyProperty IsOnlineProperty =
        DependencyProperty.Register(nameof(IsOnline), typeof(bool), typeof(StatusLamp),
            new FrameworkPropertyMetadata(false,
                FrameworkPropertyMetadataOptions.AffectsRender, OnIsOnlineChanged));

    public bool IsOnline
    {
        get => (bool)GetValue(IsOnlineProperty);
        set => SetValue(IsOnlineProperty, value);
    }

    internal static string NameFor(bool isOnline)
        => isOnline ? "Line status: online" : "Line status: offline";

    private static void OnIsOnlineChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        // Raise a UIA property-changed event the moment the value changes. Without this,
        // a screen reader keeps the old name and cannot notice the change of state
        if (UIElementAutomationPeer.FromElement((UIElement)d) is AutomationPeer peer)
        {
            peer.RaisePropertyChangedEvent(
                AutomationElementIdentifiers.NameProperty,
                NameFor((bool)e.OldValue), NameFor((bool)e.NewValue));
        }
    }

    protected override AutomationPeer OnCreateAutomationPeer()
        => new StatusLampAutomationPeer(this);
}

public class StatusLampAutomationPeer : FrameworkElementAutomationPeer
{
    public StatusLampAutomationPeer(StatusLamp owner) : base(owner) { }

    protected override AutomationControlType GetAutomationControlTypeCore()
        => AutomationControlType.Text; // Text-equivalent if it is a status display with no operation

    protected override string GetNameCore()
        => StatusLamp.NameFor(((StatusLamp)Owner).IsOnline);
}

Mengembalikan nama tidak cukup; memberitahunya dengan event saat ia berubah juga adalah pekerjaan Peer. Teknologi bantu tidak punya waktu sendiri untuk mengambil ulang nilai, jadi implementasi yang tidak menaikkan event perubahan berada dalam keadaan “benar hanya ketika ditanya lagi”, dan pengguna pembaca layar tidak diberitahu tentang perubahan state.

Alur memberitahu pembaca layar tentang perubahan stateSaat nilai kontrol berubah, AutomationPeer menaikkan event perubahan properti Name; teknologi bantu tidak mengambil ulang sendiri, jadi tanpa event ia tetap pada nama lama dan tidak dapat menyadari perubahanPembaca layarAutomationPeerKontrolPembaca layarAutomationPeerKontrolTanpa event ia tetap pada nama lamaNilai IsOnline berubahNaikkan event perubahan properti NameUmumkan state baru

Gambar 11: Perubahan nilai mencapai pembaca layar hanya ketika AutomationPeer memberitahunya dengan event perubahan.

Jika kontrol kustom punya operasi (dapat ditekan, nilainya dapat diubah, dapat dipilih), Anda menimpa GetPattern dan menyediakan antarmuka pola seperti IInvokeProvider atau IRangeValueProvider.15 Poinnya adalah bahwa jika Anda membangun Peer juga di sisi pustaka-kontrol-bersama, setiap layar yang memakainya menjadi didukung secara otomatis. Itu fondasi “gulirkan ke samping” Bab 9.

6. Bisakah Anda mencapai setiap fungsi dari keyboard saja?

Kriteria keberhasilan WCAG 2.1.1 (Keyboard) mensyaratkan bahwa semua fungsionalitas konten dapat dioperasikan lewat antarmuka keyboard.8 Pengguna pembaca layar pada prinsipnya tidak memakai mouse, jadi fungsi yang tidak dapat Anda capai dari keyboard sama seperti fungsi yang tidak ada. Sudut pandang pemeriksaan adalah sebagai berikut.

Sudut pandang Apa yang dikonfirmasi Sarana utama di WinForms / WPF
Urutan tab Apakah urutan gerakan tombol Tab cocok dengan urutan visual (kiri-atas → kanan-bawah)? Merapikan TabIndex, menyetel TabStop
Access key Bisakah Anda pindah langsung ke item utama dengan Alt+huruf? Di WinForms, & di Text; di WPF, _ di header
Pintasan Apakah ada tombol mandiri untuk operasi sering (simpan, cari, konfirmasi)? Menetapkan Ctrl+S dan semacamnya, menampilkannya di menu
Indikasi fokus Bisakah Anda mengikuti dengan mata di mana fokus sekarang? Jangan hapus persegi fokus; gambar sendiri ketika Anda menggambar kustom
Fungsi hanya-mouse Apakah ada fungsi yang hanya dapat dipakai lewat klik-ganda, klik-kanan, seret, atau hover? Tawarkan fungsi yang sama dari menu atau tombol juga
Dialog Apakah Enter = tombol bawaan dan Esc = batal bekerja? AcceptButton/CancelButton, IsDefault/IsCancel

Walkthrough aksesibilitas WinForms juga mencantumkan, sebagai dasar, menempatkan label di urutan tab langsung sebelumnya dari field input, dan menaruh access key pada kontrol dan menu yang ingin dipindah pengguna.12

Yang ingin kami tekankan adalah bahwa ini bukan “biaya ekstra untuk dukungan disabilitas”. Dalam pekerjaan rutin seperti entri pesanan, apakah Anda dapat menyelesaikan input tanpa melepaskan tangan dari posisi home adalah yang memutuskan throughput operator apa adanya. Urutan tab yang kacau atau operasi yang mensyaratkan mouse adalah cacat yang mencukur sedikit produktivitas setiap pengguna setiap hari. Dukungan aksesibilitas dan efisiensi keyboard hanyalah dua nama untuk pekerjaan yang sama (untuk prioritas menurut lingkungan pemakaian, lihat juga “Desain UX aplikasi Windows”).

Efek ganda merapikan keyboardMerapikan urutan tab, access key, dan indikasi fokus menghasilkan dua efek sekaligus — pengguna teknologi bantu dapat mencapai fungsi, dan kecepatan input setiap operator — dan fungsi yang hanya dapat dipakai dengan mouse sama seperti fungsi yang tidak adaRapikan keyboardPengguna teknologi bantuKecepatan setiap operatorFungsi hanya-mouseSama seperti tidak ada

Gambar 12: Merapikan operasi keyboard mewujudkan dukungan teknologi bantu dan efisiensi setiap pengguna pada saat yang sama; fungsi hanya-mouse sama seperti tidak ada.

7. Warna dan kontras — 4,5:1 dan “warna bukan satu-satunya sarana”

7.1. Panduan rasio kontras adalah 4,5:1

Kriteria keberhasilan WCAG 1.4.3 (Contrast (Minimum)) mensyaratkan rasio kontras setidaknya 4,5:1 untuk teks dan gambar teks, dan setidaknya 3:1 untuk teks besar.8 Desain modern yang menempatkan teks abu-abu muda pada latar putih tidak jarang gagal memenuhi kriteria ini. Pengguna aplikasi bisnis mencakup orang yang penglihatan dan penglihatan warnanya telah berubah dengan usia, dan orang yang memakainya di lingkungan redup seperti pabrik. Biasakan mengukur dengan pemeriksa kontras pada tinjauan desain.

7.2. Jangan sampaikan informasi hanya lewat warna

Kriteria keberhasilan 1.4.1 (Use of Color) adalah bahwa warna tidak boleh menjadi satu-satunya sarana visual untuk menyampaikan informasi.8 Contoh khas di aplikasi bisnis adalah sebagai berikut.

  • Menampilkan baris kesalahan hanya dengan teks merah → juga sediakan ikon kesalahan dan kolom pesan
  • Menampilkan field wajib hanya dengan warna label → tambahkan “*” atau kata “Wajib”
  • Menampilkan status hanya dengan warna lampu → jadikan warna + bentuk, atau kata (“Berjalan”, “Berhenti”)

Mengingat keragaman penglihatan warna, ini juga bukan “respons khusus” melainkan dasar desain tampilan.

Mengganti informasi yang disampaikan hanya lewat warnaTampilan yang menunjukkan kesalahan hanya dengan teks merah diganti dengan ikon kesalahan plus kolom pesan; tampilan yang menunjukkan field wajib hanya dengan warna label diganti dengan menambah kata Wajib; tampilan yang menunjukkan status hanya dengan warna lampu diganti dengan menggabungkan bentuk atau kataKesalahan hanya teks merahJuga sediakan ikon dan kataWajib hanya dari warna labelTambahkan kata WajibStatus hanya dari warna lampuGabungkan warna dengan bentuk atau kata

Gambar 13: Contoh khas menyampaikan hanya lewat warna diganti dengan menggabungkan ikon, kata, serta bentuk atau teks.

7.3. Mengikuti tema kontras (kontras tinggi)

Windows punya tema kontras (dulu kontras tinggi) yang beralih ke skema warna dengan pemisahan kuat latar depan dan latar belakang; pengguna dapat memilih dan menyunting tema built-in yang dirancang agar rasio kontras umumnya 7:1 atau lebih.9 Prinsip di sisi aplikasi sederhana: jangan hard-code warna; hormati warna sistem.

  • WinForms: jika Anda membiarkan ForeColor/BackColor pada bawaan, pengaturan warna pengguna dipakai. Di tempat Anda telah menerapkan warna sendiri, nilai dengan SystemInformation.HighContrast, beralih ke skema berbasis SystemColors, dan ikuti perubahan pengaturan dengan event UserPreferenceChanged.12
  • WPF/WinUI: jika Anda merujuk sumber daya kelas SystemColors, Anda mengikuti peralihan tema. Tempat yang Anda isi dengan kuas sendiri menjadi penyebab kerusakan.9
Mengikuti tema kontrasTempat di mana warna di-hard-code rusak pada peralihan ke tema kontras, jadi beralih ke skema berbasis SystemColors dan ikuti dengan event perubahan pengaturan; jika Anda merujuk warna sistem Anda dapat mengikuti warna pengguna secara otomatisDi-hard-codeRujukan warna sistemBeralih ke tema kontrasBagaimana warna ditentukan?Skema warna rusakSecara otomatis mengikuti warna penggunaBeralih ke SystemColorsIkuti dengan event perubahan pengaturan

Gambar 14: Hanya tempat di mana warna di-hard-code yang rusak di bawah tema kontras; rujukan warna sistem mengikuti secara otomatis.

Juga, pengguna dengan penglihatan rendah sering memakai pembesaran OS tinggi (penskalaan DPI), jadi dukungan DPI tinggi juga bagian dari dukungan aksesibilitas. Aplikasi yang tata letaknya rusak pada 125%–200% tidak dapat dipakai pada titik itu. Lihat “Dukungan DPI tinggi di WinForms” dan “Dukungan DPI tinggi WPF” untuk rinciannya.

8. Verifikasi dalam praktik — Accessibility Insights dan pemeriksaan langsung pembaca layar

8.1. Accessibility Insights for Windows

Microsoft menyediakan Accessibility Insights for Windows sebagai alat verifikasi aksesibilitas untuk aplikasi Windows, dengan tiga pemakaian utama.10

  • Live Inspect: cukup arahkan mouse ke elemen atau fokuskan dengan keyboard, dan Anda dapat mengonfirmasi properti UIA-nya (Name, ControlType, pola, dan semacamnya). Sarana terpendek untuk melihat “apa Name tombol ini”.
  • FastPass: pemeriksaan ringan yang mendeteksi masalah aksesibilitas berdampak tinggi dalam kurang dari lima menit. Masalah yang dapat dinilai secara mekanis, seperti Name yang hilang, dapat diinventarisasi per layar baru.
  • Troubleshooting: membantu diagnosis dan perbaikan masalah tertentu. Dari masalah yang terdeteksi Anda dapat berjalan langsung ke panduan perbaikan per kerangka yang juga dikutip artikel ini.

Inspect.exe dan AccEvent, termasuk dalam Windows SDK, juga dapat mengonfirmasi pohon UIA dan properti, tetapi mereka diposisikan sebagai alat warisan, dan pindah ke Accessibility Insights kini direkomendasikan.10

Tiga pemakaian Accessibility InsightsAccessibility Insights for Windows menyediakan mengonfirmasi properti UIA dengan Live Inspect, pemeriksaan ringan masalah berdampak tinggi dengan FastPass, dan bantuan mendiagnosis serta memperbaiki masalah dengan Troubleshooting; pindah dari alat warisan seperti Inspect.exe direkomendasikanPindah direkomendasikanAccessibility InsightsLive InspectFastPassTroubleshootingKonfirmasi properti UIADeteksi masalah berdampak tinggiBantu diagnosis dan perbaikanInspect.exe dan semacamnya

Gambar 15: Accessibility Insights punya tiga pemakaian konfirmasi, deteksi, dan diagnosis, dan adalah tujuan pindah dari alat warisan.

8.2. Pemeriksaan langsung dengan pembaca layar

Yang dapat dideteksi pemeriksaan otomatis alat hanyalah masalah yang dapat dinilai secara mekanis. Pada akhirnya, selalu telusuri operasi bisnis sungguhan dengan pembaca layar. Narrator built-in Windows dapat dimulai segera dengan Ctrl+tombol Windows+Enter, dan NVDA dapat diperkenalkan secara gratis.11 Trik pemeriksaannya adalah mencoba, tanpa melihat layar (atau dengan tampilan mati), hanya mengandalkan pengumuman, apakah Anda dapat menyelesaikan tugas sungguhan seperti “masukkan satu pesanan dan konfirmasikan”. Masalah seperti nama ada tetapi urutan pengumuman tidak koheren, atau fokus lolos ke luar modal, hanya ditemukan secara langsung.

Menggabungkan verifikasi alat dan pemeriksaan langsungYang dapat dideteksi pemeriksaan otomatis seperti FastPass hanyalah masalah yang dapat dinilai secara mekanis; sisanya ditemukan secara langsung dengan menelusuri operasi bisnis sungguhan dengan pembaca layar dan menemukan masalah urutan-pengumuman serta fokusPemeriksaan otomatis alatMasalah yang dapat dinilai secara mekanisMasalah yang tidak dapat dideteksinya tetapPemeriksaan langsung dengan pembaca layarTelusuri operasi bisnisMasalah urutan-pengumuman dan fokus

Gambar 16: Inventarisasi masalah mekanis dengan pemeriksaan otomatis, dan temukan sisanya dengan pemeriksaan langsung dengan pembaca layar.

8.3. Membangunnya ke dalam alur pengembangan, dan manfaat bersama dengan pengujian otomatis UI

Agar verifikasi tidak menjadi bergantung-orang, kami merekomendasikan membangun daftar periksa berikut ke dalam item tinjauan untuk layar baru.

# Item periksa Sarana
1 FastPass dengan nol kesalahan Accessibility Insights
2 Setiap field input dan tombol punya Name Live Inspect
3 Anda dapat mencapai setiap fungsi dengan tombol Tab saja Manual
4 Enter/Esc dan pintasan utama bekerja Manual
5 Rasio kontras teks 4,5:1 atau lebih Pemeriksa kontras
6 Tidak rusak di bawah tema kontras Beralih tema dan periksa secara visual
7 Tidak rusak pada penskalaan 200% Ubah pengaturan tampilan dan periksa secara visual
8 Anda dapat menyelesaikan tugas representatif dengan pembaca layar Narrator/NVDA

Dan satu lagi. Pengujian otomatis UI dengan FlaUI dan semacamnya dibangun di atas UIA yang sama yang dipakai pembaca layar. Name dan pola yang Anda pasang untuk aksesibilitas menjadi bagian kode uji, dan AutomationId yang dirancang untuk uji memudahkan debug di Live Inspect. Sebaliknya, UI yang tidak muncul di pohon UIA tidak terlihat baik bagi uji maupun teknologi bantu. Aksesibilitas dan kemampuan diuji adalah dua sisi investasi yang sama (“Pengujian otomatis UI untuk aplikasi desktop Windows”).

Manfaat bersama aksesibilitas dan pengujian otomatis UIPembaca layar dan pengujian otomatis UI seperti FlaUI dibangun di atas UIA yang sama, jadi Name dan pola yang Anda pasang dapat dipakai dari keduanya, dan UI yang tidak muncul di pohon UIA tidak terlihat dari mana punMerapikan pohon UIAPembaca layar dapat membacanyaDapat dipakai dalam pengujian otomatis UIDua sisi investasi yang samaUI yang tidak muncul di UIATidak terlihat dari mana pun

Gambar 17: Karena mereka duduk pada fondasi UIA yang sama, merapikan pohon UIA terbayar baik untuk teknologi bantu maupun pengujian otomatis UI.

9. Cara menetapkan prioritas — jangan perbaiki setiap layar sekaligus

Memperbaiki sistem inti ratusan layar sekaligus tidak realistis baik dalam biaya maupun mutu. Pendekatan yang kami rekomendasikan adalah tiga tingkat berikut.

  1. Perbaiki dari layar yang dipakai pengguna itu dalam pekerjaan. Akomodasi wajar adalah proses merespons secara individual permintaan dari orang yang bersangkutan.1 Pertama minta orang itu mengoperasikan pekerjaan aktual dengan pembaca layar, dan identifikasi bersama di mana mereka macet. Dalam banyak kasus layar yang dipakai dalam kerja sehari-hari menyempit ke beberapa hingga belasan, dan masalah fatal di antaranya (tombol tanpa nama, tombol konfirmasi yang tidak dapat ditekan dari keyboard) dapat diselesaikan dalam perbaikan berhari-hari.
  2. Buat pengembangan baru patuh standar. Tambahkan daftar periksa Bab 8 ke Definition of Done, dan bangun layar baru yang didukung sejak awal. Tidak seperti perbaikan setelah-fakta, kenaikan biaya membangunnya pada waktu desain sedikit.
  3. Gulirkan ke samping dengan memperbaiki kontrol bersama. Jika Anda mengimplementasikan AccessibleName bawaan atau AutomationPeer pada bagian internal bersama seperti dialog pencarian, kisi, atau input tanggal, ia berlaku secara batch pada setiap layar yang memakainya. Itu langkah yang jauh lebih hemat biaya daripada menyentuh layar individual satu per satu.
Tiga tingkat prioritas perbaikanPerbaiki dari layar yang dipakai pengguna dalam pekerjaan, buat pengembangan baru patuh standar dengan daftar periksa, dan gulirkan ke setiap layar dengan memperbaiki kontrol bersama1. Perbaiki dari layar yang dipakai pengguna2. Pekerjaan baru patuh standar3. Gulirkan ke samping dengan kontrol bersamaBerlaku secara batch pada setiap layar yang memakainya

Gambar 18: Maju bukan dengan memperbaiki setiap layar sekaligus melainkan dalam tiga tingkat layar yang dipakai, pekerjaan baru, dan bagian bersama.

Dan catatan dialog sama pentingnya dengan respons teknis. Akomodasi wajar adalah proses “berdialog dan menyesuaikan secara individual”, bukan memenuhi penuh setiap permintaan. Mempertimbangkan sarana alternatif dengan orang itu (melakukan pekerjaan itu di layar lain, menyiapkan ekspor CSV, menutupinya dalam operasi) dan menyepakati, untuk perbaikan yang bebannya terlalu berat, juga adalah hasil sah dialog konstruktif.1 Mencatat apa yang diminta, apa yang direspons, dan apa yang dijadikan sarana alternatif menjadi bukti itikad baik organisasi.

Alur dialog konstruktif dan catatanRespons permintaan dari penyandang disabilitas lewat dialog konstruktif; laksanakan perbaikan yang dapat direspons; untuk perbaikan yang bebannya terlalu berat, pertimbangkan sarana alternatif dengan orang itu dan sepakati; catat apa yang diminta, apa yang direspons, dan apa yang dijadikan sarana alternatifTidakYaPermintaanDialog konstruktifApakah bebannya terlalu berat?Respons dengan perbaikanPertimbangkan sarana alternatif dan sepakatiCatat riwayat

Gambar 19: Dalam dialog konstruktif Anda bersepakat dengan orang itu tentang perbaikan atau sarana alternatif, dan meninggalkan riwayat itu dalam catatan.

10. Ringkasan

  • Dengan undang-undang yang diamandemen tentang Penghapusan Diskriminasi terhadap Penyandang Disabilitas yang berlaku April 2024, penyediaan akomodasi wajar menjadi kewajiban bagi pelaku usaha juga. Bidang ketenagakerjaan telah menjadi kewajiban pemberi kerja sejak 2016 di bawah Undang-Undang Promosi Ketenagakerjaan Penyandang Disabilitas. Membuat aplikasi lebih mudah dipakai di muka adalah “perbaikan lingkungan” (kewajiban upaya), dan semakin jauh ia telah pergi, semakin ringan respons individual.
  • Kriteria teknis terkonsentrasi di WCAG (JIS X 8341-3:2016), dan pemikiran yang sama dapat diterapkan pada aplikasi desktop lewat WCAG2ICT.
  • Pembaca layar membaca aplikasi lewat UI Automation. Trio pohon UIA, properti (Name/ControlType/AutomationId), dan pola kontrol adalah fondasinya.
  • Prioritas tertinggi adalah Name. WinForms memakai AccessibleName dan mengaitkan Label dengan urutan tab; WPF memakai AutomationProperties.Name/LabeledBy; kontrol kustom memakai AutomationPeer.
  • Dapat mencapai setiap fungsi dari keyboard saja adalah kriteria keberhasilan WCAG dan, pada saat yang sama, produktivitas setiap operator. Rapikan urutan tab, access key, dan indikasi fokus.
  • Tiga dasar warna adalah rasio kontras 4,5:1, warna bukan satu-satunya sarana, dan menghormati warna sistem dalam tema kontras.
  • Gabungkan verifikasi dengan FastPass+Live Inspect di Accessibility Insights dan pemeriksaan langsung dengan Narrator/NVDA, dan bangun ke dalam alur pengembangan sebagai daftar periksa untuk layar baru.
  • Jangan perbaiki setiap layar sekaligus; maju dalam urutan layar yang dipakai pengguna → dukungan standar untuk pekerjaan baru → guliran ke samping kontrol bersama. Akomodasi wajar adalah proses dialog, dan catatan riwayat melindungi organisasi.

Sebagai langkah pertama kami merekomendasikan memilih salah satu layar utama Anda, menjalankan FastPass di Accessibility Insights for Windows, lalu menelusuri pekerjaan dengan tombol Tab saja. Dalam tiga puluh menit, posisi saat ini aplikasi Anda sendiri menjadi sangat konkret.

Artikel terkait

Area konsultasi terkait

KomuraSoft LLC menangani perbaikan aksesibilitas aplikasi bisnis WinForms/WPF (dukungan pembaca layar, merapikan operasi keyboard, dukungan tema kontras), mengimplementasikan AutomationPeer pada kontrol bersama, serta konsultasi diagnosis keadaan saat ini dan penetapan prioritas dengan Accessibility Insights. Memulai dari tahap “kami ingin mengonfirmasi apakah seorang karyawan dapat memakai aplikasi kami dengan pembaca layar” tidak apa-apa.

Tautan referensi

  1. Cabinet Office, Leaflet “From 1 April 2024, the provision of reasonable accommodation became an obligation”. Tentang amandemen Reiwa 3 terhadap Undang-Undang Penghapusan Diskriminasi terhadap Penyandang Disabilitas yang berlaku pada 1 April Reiwa 6 dan penyediaan akomodasi wajar oleh pelaku usaha menjadi kewajiban; tentang penyediaan akomodasi wajar sebagai respons, dalam rentang yang bukan beban berlebihan, terhadap pernyataan niat dari penyandang disabilitas; tentang pentingnya dialog konstruktif dan penolakan sepihak yang berpotensi merupakan pelanggaran kewajiban; tentang “perbaikan lingkungan”, langkah perbaikan di muka yang ditujukan kepada jumlah tak tertentu penyandang disabilitas, sebagai kewajiban upaya; dan tentang ketenagakerjaan serta kerja mengikuti ketentuan Undang-Undang Promosi Ketenagakerjaan Penyandang Disabilitas.  2 3 4 5 6 7 8 9 10

  2. Ministry of Health, Labour and Welfare, The prohibition of discrimination against persons with disabilities in employment and the obligation to provide reasonable accommodation. Tentang undang-undang yang diamandemen tentang Promosi Ketenagakerjaan Penyandang Disabilitas yang berlaku April Heisei 28 mewajibkan pemberi kerja melarang diskriminasi disabilitas dalam ketenagakerjaan dan menyediakan akomodasi wajar dalam rentang yang bukan beban berlebihan; dan tentang materi terkait seperti pedoman akomodasi wajar.  2 3 4

  3. Web Accessibility Infrastructure Committee (WAIC), Understanding JIS X 8341-3:2016. Tentang JIS X 8341-3:2016 sebagai standar koresponden ISO/IEC 40500:2012, dan tubuh standarnya adalah isi yang sama seperti WCAG 2.0; dan tentang cakupan konten web yang diasumsikan standar.  2

  4. W3C, Guidance on Applying WCAG 2 to Non-Web Information and Communications Technologies (WCAG2ICT). Tentang W3C Group Note yang menunjukkan cara menerapkan prinsip, pedoman, dan kriteria keberhasilan WCAG 2.0/2.1/2.2 pada dokumen dan perangkat lunak non-Web.  2

  5. Microsoft Learn, UI Automation Specification. Tentang UI Automation yang menyediakan informasi UI kepada teknologi bantu seperti pembaca layar dan memungkinkan operasi dengan sarana selain input standar; dan tentang komposisi elemen UIA, pohon, properti, pola kontrol, jenis kontrol, dan event.  2 3

  6. Microsoft Learn, WinForms: Setting the accessible name on a control. Tentang Text yang dipakai ulang sebagai Name UIA pada beberapa kontrol, sementara ComboBox, ListBox, ListView, PictureBox, ProgressBar, TabControl, TextBox, TreeView dan semacamnya tidak memakainya ulang; tentang menempatkan kontrol sasaran langsung setelah TabIndex Label agar teks Label dipakai sebagai Name; dan tentang menyetel AccessibleName secara eksplisit serta masalah string kosong yang tertinggal di berkas desainer.  2 3 4

  7. Microsoft Learn, WPF: Setting the accessible name on a button. Tentang Content Button yang dipakai ulang sebagai Name UIA secara bawaan; tentang pembaca layar yang tidak dapat mengumumkan tujuan tombol tanpa nama; dan tentang mengaitkan TextBlock dengan AutomationProperties.LabeledBy serta menyetel AutomationProperties.Name secara eksplisit.  2 3 4

  8. W3C / Web Accessibility Infrastructure Committee (WAIC) translation, Web Content Accessibility Guidelines (WCAG) 2.1 Japanese translation. Tentang kriteria keberhasilan 1.4.3 (Contrast (Minimum)) 4,5:1 untuk teks dan 3:1 untuk teks besar; tentang kriteria keberhasilan 1.4.1 (Use of Color) tidak menjadikan warna satu-satunya sarana visual; dan tentang kriteria keberhasilan 2.1.1 (Keyboard) tentang kemampuan operasi keyboard semua fungsionalitas.  2 3 4 5 6

  9. Microsoft Learn, Contrast themes. Tentang tema kontras yang memakai palet terbatas rasio kontras umumnya 7:1 atau lebih; tentang memilih tema built-in dan menyunting warna; dan tentang sumber daya kelas SystemColor yang didefinisikan sebagai pasangan latar depan/latar belakang dan mengikuti peralihan tema secara otomatis.  2 3

  10. Microsoft Learn, Accessibility testing. Tentang tiga skenario Accessibility Insights for Windows — Live Inspect (mengonfirmasi properti UIA lewat hover/fokus), FastPass (mendeteksi masalah berdampak tinggi dalam kurang dari lima menit), dan Troubleshooting — serta rekomendasi pindah dari alat warisan seperti Inspect dan AccEvent.  2 3

  11. NVDA Japanese Team, NVDA Japanese edition. Tentang pembaca layar Windows NVDA yang gratis dan sumber terbuka serta penyediaan edisi Jepangnya.  2

  12. Microsoft Learn, Walkthrough: Creating an Accessible Windows-based Application. Tentang menempatkan Label deskriptif di urutan tab langsung sebelumnya dari field input; tentang access key lewat & di Text; tentang menilai kontras tinggi dengan SystemInformation.HighContrast dan memakai SystemColors; tentang mengikuti event UserPreferenceChanged; dan tentang menggabungkan isyarat visual dengan informasi yang disampaikan lewat warna.  2 3

  13. Microsoft Learn, Providing Accessibility Information for Controls. Tentang properti AccessibleName, AccessibleDescription, AccessibleRole, dan AccessibleDefaultActionDescription kontrol WinForms serta cara menyetelnya. 

  14. Microsoft Learn, WPF: Setting the accessible name on an edit field. Tentang Text milik TextBlock yang dipakai ulang sebagai Name UIA, sementara Text milik TextBox diekspos sebagai Value UIA; dan tentang mengaitkan TextBlock label dengan TextBox lewat AutomationProperties.LabeledBy, atau menyetel AutomationProperties.Name. 

  15. Microsoft Learn, UI Automation of a WPF Custom Control. Tentang kontrol kustom yang menimpa OnCreateAutomationPeer dan mengembalikan kelas turunan AutomationPeer; tentang mewarisi kelas Peer yang bersesuaian dengan kontrol dasar; tentang menyediakan penyedia pola lewat GetPattern; dan tentang menimpa dari sisi XAML dengan atribut AutomationProperties.  2

Artikel terbaru dengan tag yang sama untuk mendalami topik-topik terdekat.

Halaman-halaman ini menempatkan topik dalam konteks layanan dan keputusan yang lebih luas.

Artikel ini berkaitan langsung dengan layanan berikut.

Pertanyaan yang sering diajukan

Pertanyaan yang sering muncul dalam konsultasi tentang topik artikel ini.

Apakah dukungan aksesibilitas untuk aplikasi bisnis diwajibkan oleh hukum?
Amandemen 2021 terhadap Undang-Undang Penghapusan Diskriminasi terhadap Penyandang Disabilitas berlaku pada 1 April 2024, dan penyediaan akomodasi wajar kepada penyandang disabilitas menjadi kewajiban bagi pelaku usaha juga. Akomodasi wajar adalah respons yang, ketika penyandang disabilitas membuat permintaan, menghapus hambatan individual dalam rentang yang bukan beban berlebihan; membuat aplikasi lebih mudah dipakai di muka diposisikan sebagai kewajiban upaya yang disebut "perbaikan lingkungan". Ketenagakerjaan, seperti hubungan antara karyawan dan perusahaan, tidak di bawah undang-undang itu melainkan di bawah Undang-Undang Promosi Ketenagakerjaan Penyandang Disabilitas, yang telah mewajibkan pemberi kerja menyediakan akomodasi wajar sejak amandemen yang berlaku April 2016. Dengan kata lain, situasi "seorang karyawan tidak dapat memakai aplikasi bisnis" sudah lama berada di ranah kewajiban. Seberapa jauh pergi dalam kasus tertentu bergantung pada situasi individual, jadi Anda mengonfirmasi sumber primer dari Cabinet Office dan Kementerian Kesehatan, Tenaga Kerja, dan Kesejahteraan serta memutuskan lewat dialog dengan orang yang bersangkutan.
Bagaimana pembaca layar membaca aplikasi desktop Windows?
Pembaca layar seperti Narrator dan NVDA membaca UI aplikasi lewat fondasi aksesibilitas yang disebut UI Automation (UIA). Sisi aplikasi mengekspos elemen di layar dalam struktur yang disebut pohon UIA; setiap elemen punya properti seperti Name (tujuan) dan ControlType (jenis), serta pola kontrol seperti Invoke (tekan) dan Value (nilai). Pembaca layar mengumumkan informasi ini sebagai "tombol Konfirmasi pesanan" dan beroperasi lewat pola. Kontrol standar WinForms dan WPF punya mekanisme ini sejak awal, jadi pekerjaan utama pengembang adalah tidak meninggalkan Name kosong, membuat UI dapat dioperasikan dari keyboard, dan mengimplementasikan informasi pada kontrol kustom.
Pada aplikasi WinForms yang sudah ada, apa yang harus kita mulai?
Jalur terpendek adalah menjalankan FastPass di Accessibility Insights for Windows terhadap layar sasaran dan menginventarisasi kontrol yang Name-nya kosong serta masalah urutan tab. Perbaikan dimulai dengan menyetel AccessibleName pada tombol hanya-ikon, mengaitkan Label di urutan tab langsung sebelumnya dari field input, dan merapikan TabIndex agar cocok dengan urutan visual. Lalu mulai Narrator atau NVDA dan telusuri operasi bisnis sungguhan tanpa melihat layar, serta konfirmasi di mana Anda macet. Anda tidak perlu memperbaiki setiap layar sekaligus; memulai dari layar yang benar-benar dipakai seseorang, dan membuat layar baru patuh standar dengan daftar periksa, adalah realistis.
Apa yang harus kita lakukan untuk dukungan kontras tinggi (tema kontras)?
Dasarnya adalah tidak meng-hard-code warna dan menghormati warna sistem. Di WinForms, biarkan ForeColor/BackColor pada bawaan atau pakai SystemColors, nilai state dengan SystemInformation.HighContrast, dan ikuti peralihan dengan event UserPreferenceChanged. Di WPF dan WinUI, juga, jika Anda merujuk sumber daya kelas SystemColors, Anda mengikuti peralihan tema secara otomatis. Pada saat yang sama, berhenti menyampaikan informasi "hanya lewat warna" — menampilkan kesalahan hanya dengan merah — dan gabungkan dengan ikon atau kata. Bahkan di tema biasa, mengambil kriteria WCAG rasio kontras teks 4,5:1 atau lebih sebagai panduan juga membuat UI lebih mudah dibaca untuk lantai toko yang redup dan untuk pengguna yang lebih tua.
Apakah dukungan aksesibilitas juga membantu pengujian otomatis UI?
Ya. Alat pengujian otomatis UI seperti FlaUI dibangun di atas UI Automation yang sama yang dipakai pembaca layar. Name, ControlType, dan pola kontrol yang Anda pasang untuk aksesibilitas dapat dipakai apa adanya dari kode uji, dan AutomationId yang dirancang untuk uji menstabilkan identifikasi elemen. Sebaliknya, UI yang digambar kustom yang tidak muncul di pohon UIA tidak terlihat baik bagi pembaca layar maupun uji. Aksesibilitas dan pengujian otomatis adalah investasi pada fondasi yang sama, jadi memasang salah satunya juga menurunkan biaya yang lain.

Profil penulis

Halaman perkenalan penulis artikel.

Go Komura

Direktur KomuraSoft LLC

Berspesialisasi dalam pengembangan perangkat lunak Windows, konsultasi teknis, dan investigasi bug, terutama pada proyek dengan sistem yang sudah ada dan bug yang sulit direproduksi.

Kembali ke blog