アクセシビリティの概要

この記事では、Windows アプリのアクセシビリティ シナリオに関連する概念とテクノロジの概要を示します。

アクセシビリティとアプリ

モビリティ、視覚、色覚、聴覚、音声、認知、リテラシーの制限など、多くの障害や障害が考えられます。 ただし、ここで提供されているガイドラインに従うことで、ほとんどの要件に対処できます。 これは、次の機能を提供することを意味します。

  • キーボード操作とスクリーン リーダーのサポート。
  • フォント、ズーム設定 (拡大)、色、ハイ コントラスト設定などのユーザーカスタマイズのサポート。
  • UI の一部の代替または補足。

XAML のコントロールは、UWP アプリ、HTML、およびその他の UI テクノロジを既にサポートしているアクセシビリティ フレームワークを活用するスクリーン リーダーなどの支援テクノロジに対する組み込みのキーボード サポートとサポートを提供します。 この組み込みサポートにより、少数のプロパティを設定するだけで、ごくわずかな作業でカスタマイズできる基本的なレベルのアクセシビリティを実現できます。 独自のカスタム XAML コンポーネントとコントロールを作成する場合は、オートメーション ピアの概念を使用して、これらのコントロールに同様のサポートを追加することもできます。

さらに、データ バインディング、スタイル、テンプレートの機能により、代替 UI の設定とテキストを表示するための動的な変更のサポートを簡単に実装できます。

UI 自動化

アクセシビリティのサポートは、主に Microsoft UI オートメーション フレームワークの統合サポートから提供されます。 このサポートは、基底クラスと、コントロール型のクラス実装の組み込み動作と、UI オートメーション プロバイダー API のインターフェイス表現によって提供されます。 各コントロール クラスは、UI オートメーション ピアの UI オートメーションの概念と、コントロールのロールとコンテンツを UI オートメーション クライアントに報告するオートメーション パターンを使用します。 アプリは UI オートメーションによってトップレベル ウィンドウとして扱われ、UI オートメーション フレームワークを通じて、そのアプリ ウィンドウ内のすべてのアクセシビリティ関連コンテンツを UI オートメーション クライアントで使用できます。 UI オートメーションの詳細については、「UI オートメーションの概要」を参照してください

支援技術

多くのユーザー アクセシビリティのニーズは、ユーザーがインストールした支援技術製品、またはオペレーティング システムによって提供されるツールと設定によって満たされます。 これには、スクリーン リーダー、画面倍率、ハイ コントラスト設定などの機能が含まれます。

支援技術製品には、さまざまなソフトウェアとハードウェアが含まれています。 これらの製品は、UI のコンテンツと構造に関する情報をスクリーン リーダーやその他の支援技術に報告する標準のキーボード インターフェイスとアクセシビリティ フレームワークを通じて動作します。 支援技術製品の例を次に示します。

  • スクリーン キーボード。キーボードの代わりにポインターを使用してテキストを入力できます。
  • 音声の単語を型指定されたテキストに変換する音声認識ソフトウェア。
  • スクリーン リーダー。テキストを音声または点字などの他の形式に変換します。
  • ナレータースクリーン リーダー。これは特に Windows の一部です。 ナレーターにはタッチ モードがあり、キーボードが使用できない場合にタッチ ジェスチャを処理して画面の読み取りタスクを実行できます。
  • ディスプレイまたは領域を調整するプログラムまたは設定 (ハイ コントラスト テーマ、ディスプレイの 1 インチあたりのドット数 (dpi) 設定、拡大鏡ツールなど)。

キーボードとスクリーン リーダーのサポートが良好なアプリは、通常、さまざまな支援技術製品で適切に動作します。 多くの場合、UWP アプリは、情報や構造を追加変更することなく、これらの製品と連携します。 ただし、アクセシビリティエクスペリエンスを最適化するために、または追加のサポートを実装するために、いくつかの設定を変更することが必要な場合があります。

支援技術を使用して基本的なアクセシビリティ シナリオをテストするために使用できるオプションの一部は、アクセシビリティ テスト記載されています。

スクリーン リーダーのサポートと基本的なアクセシビリティ情報

スクリーン リーダーは、音声言語や点字出力などの他の形式でレンダリングすることで、アプリ内のテキストへのアクセスを提供します。 スクリーン リーダーの正確な動作は、ソフトウェアとユーザーの構成によって異なります。

たとえば、一部のスクリーン リーダーは、ユーザーが起動するか、表示されているアプリに切り替えたときにアプリ UI 全体を読み取ります。これにより、ユーザーは移動を試みる前に、利用可能なすべての情報コンテンツを受け取ることができます。 一部のスクリーン リーダーは、タブ ナビゲーション中にフォーカスを受け取ったときに、個々のコントロールに関連付けられているテキストも読み取ります。 これにより、ユーザーはアプリケーションの入力コントロール間を移動する際に自分の方向を設定できます。 ナレーターは、ユーザーの選択に応じて両方の動作を提供するスクリーン リーダーの例です。

ユーザーがアプリを理解またはナビゲートするためにスクリーン リーダーまたはその他の支援技術が必要とする最も重要な情報は、 アプリの要素部分のアクセス可能な名前 です。 多くの場合、コントロールまたは要素には、それ以外の方法で指定した他のプロパティ値から計算されるアクセス可能な名前が既に含まれています。 既に計算された名前を使用できる最も一般的なケースは、内部テキストをサポートして表示する要素です。 その他の要素については、要素構造のベスト プラクティスに従って、アクセス可能な名前を指定する他の方法を考慮する必要がある場合があります。 また、アプリのアクセシビリティのアクセシビリティ対応の名前として明示的に意図された名前を指定する必要がある場合があります。 これらの計算値のうち、一般的な UI 要素で動作する値の数の一覧と、アクセシビリティに関する一般的な名前の詳細については、「基本的なアクセシビリティ情報」を参照してください

他にも複数のオートメーション プロパティがあります (次のセクションで説明するキーボード プロパティを含む)。 ただし、すべてのスクリーン リーダーですべてのオートメーション プロパティがサポートされているわけではありません。 一般に、スクリーン リーダーに対して可能な限り幅広いサポートを提供するために、すべての適切なオートメーション プロパティとテストを設定する必要があります。

キーボードのサポート

適切なキーボード サポートを提供するには、アプリケーションのすべての部分をキーボードで使用できるようにする必要があります。 アプリがほとんどの標準コントロールを使用していて、カスタム コントロールを使用していない場合は、ほとんどの方法が既にあります。 基本的な XAML コントロール モデルでは、タブ ナビゲーション、テキスト入力、コントロール固有のサポートなど、組み込みのキーボード サポートが提供されます。 レイアウト コンテナー (パネルなど) として機能する要素は、レイアウト順序を使用して既定のタブ オーダーを確立します。 この順序は、多くの場合、UI のアクセシビリティ対応の表現に使用する正しいタブ オーダーです。 ListBox コントロールと GridView コントロールを使用してデータを表示する場合は、組み込みの矢印キー ナビゲーションが提供されます。 または、Button コントロールを使用する場合は、ボタンのアクティブ化のために Space キーまたは Enter キーが既に処理されています。

タブ オーダーやキーベースのアクティブ化やナビゲーションなど、キーボードサポートのすべての側面の詳細については、「キーボードのアクセシビリティ」を参照してください

メディアとキャプション

通常、MediaElement オブジェクトを介してオーディオビジュアル メディアを表示します。 MediaElement API を使用してメディアの再生を制御できます。 アクセシビリティの目的で、ユーザーが必要に応じてメディアを再生、一時停止、停止できるようにするコントロールを提供します。 場合によっては、キャプションや物語の説明を含む代替オーディオ トラックなど、アクセシビリティを目的とした追加のコンポーネントがメディアに含まれている場合があります。

アクセシビリティ対応のテキスト

テキストの 3 つの主な側面は、アクセシビリティに関連しています。

  • ツールは、テキストをタブ シーケンス トラバーサルの一部として読み取るか、ドキュメント全体の表現の一部としてのみ読み取るかを決定する必要があります。 この決定を制御するために、テキストを表示するための適切な要素を選択するか、またはそれらのテキスト要素のプロパティを調整します。 各テキスト要素には特定の目的があり、その目的には多くの場合、対応する UI オートメーション ロールがあります。 間違った要素を使用すると、間違ったロールが UI オートメーションに報告され、支援技術ユーザーに混乱を招く可能性があります。
  • 多くのユーザーには、背景とのコントラストが十分でない限り、テキストを読み取りにくくする視覚制限があります。 これがユーザーに与える影響は、その視覚制限がないアプリ デザイナーにとって直感的ではありません。 たとえば、色覚障疳のあるユーザーの場合、デザインの色の選択が不十分な場合、一部のユーザーがテキストを読み取ることができない可能性があります。 Web コンテンツ用に最初に作成されたアクセシビリティに関する推奨事項は、アプリでもこれらの問題を回避できるコントラストの標準を定義します。 詳細については、「アクセシビリティ対応テキストの要件」を参照してください
  • 多くのユーザーは、単純に小さすぎるテキストを読むのが困難です。 この問題を回避するには、最初にアプリの UI のテキストを合理的に大きくします。 ただし、大量のテキストを表示するアプリや、他のビジュアル要素が混在するテキストを表示するアプリでは困難です。 このような場合は、アプリがディスプレイをスケールアップできるシステム機能と正しく対話し、アプリ内のすべてのテキストがそれに合わせてスケールアップされるようにします。 (一部のユーザーは、アクセシビリティ オプションとして dpi 値を変更します。このオプションは、[簡単操作] で画面の内容を大きくして、外観と個人用設定 / の表示のコントロール パネル UI にリダイレクトするオプションから使用できます)。

ハイ コントラスト テーマのサポート

UI コントロールは、テーマの XAML リソース ディクショナリの一部として定義された視覚的表現を使用します。 これらのテーマの 1 つ以上は、システムがハイ コントラストに設定されている場合に特に使用されます。 ユーザーがハイ コントラストに切り替わると、リソース ディクショナリから適切なテーマを動的に検索することで、すべての UI コントロールで適切なハイ コントラスト テーマも使用されます。 明示的なスタイルを指定するか、ハイ コントラストテーマがスタイルの変更を読み込んでオーバーライドできないようにする別のスタイル設定手法を使用して、テーマを無効にしていないことを確認してください。 詳細については、「ハイ コントラスト テーマ」を参照してください

代替 UI の設計

アプリを設計するときは、移動性、視覚、聴覚に制限があるユーザーがアプリをどのように使用できるかを検討します。 支援技術製品は標準 UI を幅広く使用するため、アクセシビリティに関して他の調整を行っていない場合でも、優れたキーボードとスクリーン リーダーのサポートを提供することが特に重要です。

多くの場合、複数の手法を使用して視聴者を拡大することで、重要な情報を伝えることができます。 たとえば、アイコンと色の情報の両方を使用して情報を強調表示して、色覚障碍のあるユーザーを支援したり、聴覚障碍のあるユーザーを支援する効果音と共に視覚的なアラートを表示したりできます。

必要に応じて、不要な要素とアニメーションを完全に削除し、ユーザー エクスペリエンスを合理化するためのその他の簡略化を提供する、アクセス可能な代替のユーザー インターフェイス要素を提供できます。 次のコード例では、ユーザー設定に応じて、ある UserControl インスタンスを別の UserControl インスタンスの代わりに表示する方法を示します。

XAML

<StackPanel x:Name="LayoutRoot" Background="White">

  <CheckBox x:Name="ShowAccessibleUICheckBox" Click="ShowAccessibleUICheckBox_Click">
    Show Accessible UI
  </CheckBox>

  <UserControl x:Name="ContentBlock">
    <local:ContentPage/>
  </UserControl>

</StackPanel>

Visual Basic

Private Sub ShowAccessibleUICheckBox_Click(ByVal sender As Object,
    ByVal e As RoutedEventArgs)

    If (ShowAccessibleUICheckBox.IsChecked.Value) Then
        ContentBlock.Content = New AccessibleContentPage()
    Else
        ContentBlock.Content = New ContentPage()
    End If
End Sub

C#

private void ShowAccessibleUICheckBox_Click(object sender, RoutedEventArgs e)
{
    if ((sender as CheckBox).IsChecked.Value)
    {
        ContentBlock.Content = new AccessibleContentPage();
    }
    else
    {
        ContentBlock.Content = new ContentPage();
    }
}

検証と発行

アクセシビリティ宣言とアプリの発行の詳細については、「ストアのアクセシビリティ」を参照してください

Note

アプリをアクセシビリティ対応として宣言することは、Microsoft Store にのみ関連します。

カスタム コントロールでの支援技術のサポート

カスタム コントロールを作成するときは、アクセシビリティサポートを提供するために、1 つ以上 の AutomationPeer サブクラスを実装または拡張することをお勧めします。 場合によっては、基底コントロール クラスで使用されたのと同じピア クラスを使用する限り、派生クラスのオートメーション サポートは基本的なレベルで十分です。 ただし、これをテストする必要があります。ピアを実装することは、ピアが新しいコントロール クラスのクラス名を正しく報告できるように、ベスト プラクティスとして引き続き推奨されます。 カスタム オートメーション ピアの実装には、いくつかの手順が必要です。 詳細については、「カスタム オートメーション ピア」を参照してください

XAML/Microsoft DirectX 相互運用をサポートするアプリでの支援技術のサポート

XAML UI でホストされている Microsoft DirectX コンテンツ (SwapChainPanel または SurfaceImageSource を使用) には、既定ではアクセスできません。 XAML SwapChainPanel DirectX 相互運用のサンプルは、ホストされている DirectX コンテンツの UI オートメーション ピアを作成する方法を示しています。 この手法により、UI オートメーションを介してホストされたコンテンツにアクセスできるようになります。

ヒント

WinUI 3 ギャラリー アプリを開き、次のアクセシビリティの原則を確認します。

WinUI 3 ギャラリー アプリには、ほとんどの WinUI 3 コントロールと機能の対話型の例が含まれています。 Microsoft Store からアプリを入手するか、GitHub でソース コードを取得します。