基本的なアクセシビリティ情報の開示

基本的なアクセシビリティ情報は、名前、役割、値に分類されることがよくあります。 このトピックでは、支援テクノロジに必要な基本情報をアプリで公開するのに役立つコードについて説明します。

アクセス可能な名前

アクセシビリティ対応の名前とは、スクリーン リーダーが UI 要素を読み上げるときに使う短い説明の文字列です。 UI 要素のアクセス可能な名前を設定して、コンテンツを理解したり UI を操作したりするために重要な意味を持ちます。 このような要素には、通常、画像、入力フィールド、ボタン、コントロール、領域が含まれます。

次の表では、XAML UI のさまざまな種類の要素に対してアクセス可能な名前を定義または取得する方法について説明します。

要素型 説明
静的テキスト TextBlock および RichTextBlock 要素の場合、アクセス可能な名前は、表示される (内部) テキストから自動的に決定されます。 その要素内のすべてのテキストが名前として使用されます。 内部テキストの Name を参照してください
画像 XAML Image 要素には、html alt 属性 img などの要素に直接類似した要素はありません。 AutomationProperties.Nameを使用して名前を指定するか、キャプションの手法を使用します。 イメージについては、「 アクセス可能な名前を参照してください。
フォーム要素 フォーム要素のアクセス可能な名前は、その要素に表示されるラベルと同じである必要があります。 Labels と LabeledBy を参照してください。
ボタンとリンク 既定では、ボタンまたはリンクのアクセス可能な名前は、内部テキストの Name で説明されているのと同じ規則を使用して、表示されるテキストに基づいています。 ボタンに画像のみが含まれている場合は、 AutomationProperties.Name を使用して、ボタンの意図したアクションと同等のテキストのみを提供します。

パネルなどのほとんどのコンテナー要素は、そのコンテンツをアクセシビリティ対応の名前として昇格しません。 これは、コンテナーではなく、名前と対応するロールを報告するアイテム コンテンツであるためです。 コンテナー要素は、支援技術ロジックがそれを走査できるように、Microsoft UI オートメーション表現の子を持つ要素であると報告する場合があります。 ただし、支援テクノロジのユーザーは、通常、コンテナーについて知る必要はないため、ほとんどのコンテナーには名前が付けられません。

ロールと値

XAML ボキャブラリの一部であるコントロールとその他の UI 要素は、定義の一部としてロールと値をレポートするためのサポートUI オートメーション実装します。 UI オートメーション ツールを使用してコントロールのロールと値の情報を調べたり、各コントロールの AutomationPeer 実装のドキュメントを読んだりすることができます。 UI オートメーション フレームワークで使用可能なロールは、AutomationControlType 列挙型で定義されます。 支援テクノロジなどのUI オートメーションクライアントは、コントロールの AutomationPeer を使用して、UI オートメーション フレームワークが公開するメソッドを呼び出すことによってロール情報を取得できます。

すべてのコントロールに値があるわけではありません。 値を持つコントロールは、この情報を、そのコントロールでサポートされているピアとパターンを通じてUI オートメーションするように報告します。 たとえば、 TextBox フォーム要素には値があります。 支援技術は、UI オートメーション クライアントであり、値が存在することと、その値が何であるかを検出できます。 この特定の場合、TextBox は、TextBoxAutomationPeer 定義を介して IValueProvider パターンをサポートします。

Note

AutomationProperties.Nameまたはその他の手法を使用してアクセス可能な名前を明示的に指定する場合は、アクセス可能な名前にコントロール ロールまたは型情報で使用されるのと同じテキストを含めないでください。 たとえば、名前に "button" や "list" などの文字列を含めないでください。 ロールと型の情報は、UI オートメーションの既定のコントロール サポートによって提供される別のUI オートメーション プロパティ (LocalizedControlType) から取得されます。 多くの支援テクノロジでは、アクセス可能な名前に LocalizedControlType を追加するため、アクセス可能な名前にロールを複製すると、不必要に繰り返される単語が発生する可能性があります。 たとえば、 Button コントロールにアクセス可能な名前の "button" を指定したり、名前の最後の部分に "button" を含めたりすると、スクリーン リーダーによって "ボタン ボタン" として読み取られる可能性があります。 ナレーターを使用して、アクセシビリティ情報のこの側面をテストする必要があります。

UI オートメーション ツリー ビューに影響を与える

UI オートメーション フレームワークにはツリー ビューの概念があり、UI オートメーションクライアントは、生、コントロール、コンテンツの 3 つのビューを使用して UI 内の要素間のリレーションシップを取得できます。 コントロール ビューは、対話型の UI 内の要素の適切な表現と編成を提供するため、UI オートメーション クライアントでよく使用されるビューです。 通常、テスト ツールを使用すると、ツールが要素の編成を示すときに使用するツリー ビューを選択できます。

既定では、UI オートメーション フレームワークによって Windows アプリの UI を表す場合に、Control 派生クラスとその他のいくつかの要素がコントロール ビューに表示されます。 ただし、UI の構成により、コントロール ビューに要素を表示したくない場合があります。この要素は、情報を複製したり、アクセシビリティ シナリオにとって重要ではない情報を提示したりします。 ツリー ビューに要素を公開する方法を変更するには、添付プロパティ AutomationProperties.AccessibilityView を使用します。 Raw ツリーに要素を配置した場合、ほとんどの支援テクノロジでは、その要素がビューの一部として報告されません。 既存のコントロールでこの動作の例をいくつか確認するには、テキスト エディターで generic.xaml デザイン参照 XAML ファイルを開き、テンプレートで AutomationProperties.AccessibilityView を検索します。

内部テキストからの名前

表示されている UI に既に存在する文字列をアクセシビリティ対応の名前の値に使用しやすくするために、コントロールやその他の UI 要素の多くは、要素内の内部テキストまたはコンテンツ プロパティの文字列値に基づいて、既定のアクセス可能な名前を自動的に決定するためのサポートを提供します。

  • TextBlockRichTextBlockTextBox および RichTextBlock それぞれ、 Text プロパティの値を既定のアクセス可能な名前として昇格します。
  • 任意の ContentControl サブクラスは、反復的な "ToString" 手法を使用して Content 値内の文字列を検索し、これらの文字列を既定のアクセス可能な名前として昇格させます。

Note

UI オートメーションによって適用されるように、アクセス可能な名前の長さは 2048 文字を超えることはできません。 アクセス可能な名前の自動決定に使用される文字列がその制限を超えると、その時点でアクセス可能な名前が切り捨てられます。

イメージのアクセス可能な名前

スクリーン リーダーをサポートし、UI 内の各要素の基本的な識別情報を提供するには、画像やグラフなどのテキスト以外の情報 (純粋な装飾要素や構造要素を除く) に代わるテキストを提供する必要がある場合があります。 これらの要素には内部テキストがないため、アクセス可能な名前には計算値がありません。 この例に示すように、 AutomationProperties.Name 添付プロパティを設定することで、アクセス可能な名前を直接設定できます。

XAML

<!-- Comment -->
<Image Source="product.png"
  AutomationProperties.Name="An image of a customer using the product."/>

または、表示されている UI に表示され、画像コンテンツのラベルに関連付けられたアクセシビリティ情報としても機能するテキスト キャプションを含めることもできます。 次に例を示します。

XAML

<Image HorizontalAlignment="Left" Width="480" x:Name="img_MyPix"
  Source="snoqualmie-NF.jpg"
  AutomationProperties.LabeledBy="{Binding ElementName=caption_MyPix}"/>
<TextBlock x:Name="caption_MyPix">Mount Snoqualmie Skiing</TextBlock>

ラベルと LabeledBy

ラベルをフォーム要素に関連付けるには、ラベル テキストに TextBlock x:Name を使用してから、フォーム要素の AutomationProperties.LabeledBy 添付プロパティを設定して、XAML 名でラベル付け TextBlock を参照することをお勧めします。 このパターンを使用する場合、支援技術では、フォーム フィールドのアクセス可能な名前としてラベル テキストを使用できます。 この手法を示す例を次に示します。

XAML

<StackPanel x:Name="LayoutRoot" Background="White">
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_FirstName">First name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_FirstName}"
      Name="tbFirstName" Width="100"/>
   </StackPanel>
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_LastName">Last name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_LastName}"
      Name="tbLastName" Width="100"/>
   </StackPanel>
 </StackPanel>

アクセシビリティ対応の説明 (省略可能)

アクセシビリティ対応の説明は、特定の UI 要素に関する追加のアクセシビリティ情報を提供します。 通常、アクセシビリティの高い名前だけでは要素の目的が適切に伝わらない場合は、アクセシビリティ対応の説明を指定します。

ナレータースクリーン リーダーは、CapsLock キーを押しながら F キーを押して、ユーザーが要素に関する詳細情報を要求した場合にのみ、要素のアクセシビリティ対応の説明を読み取ります。

アクセス可能な名前は、コントロールの動作を完全に文書化するのではなく、コントロールを識別するためのものです。 コントロールを簡単に説明するだけでは不十分な場合は、AutomationProperties.Nameに加えて、AutomationProperties.HelpText 添付プロパティを設定できます。

アクセシビリティの早期および頻繁なテスト

最終的には、スクリーン リーダーをサポートするための最善の方法は、自分でスクリーン リーダーを使用してアプリをテストすることです。 スクリーン リーダーの動作と、アプリに表示されない基本的なアクセシビリティ情報を示します。 その後、それに応じて UI またはUI オートメーションプロパティの値を調整できます。 詳しくは、「アクセシビリティ テスト」をご覧ください。

アクセシビリティのテストに使用できるツールの 1 つは、 AccScope と呼ばれます。 AccScope ツールは、支援技術がアプリをオートメーション ツリーとして表示する方法を表す UI の視覚的表現を表示できるため、特に便利です。 特に、ナレーター モードでは、ナレーターがアプリからテキストを取得する方法と、アプリが UI 内の要素をどのように整理するかを確認できます。 AccScope は、アプリの開発サイクル全体を通して、予備設計フェーズ中でも使用して役立てることができるように設計されています。 詳細については、「 AccScope」を参照してください。

動的データからアクセス可能な名前

Windows では、 data バインディングと呼ばれる機能を使用して、関連付けられたデータ ソースからの値を表示するために使用できる多くのコントロールがサポートされています。 リストにデータ項目を設定する場合は、最初のリストが設定された後で、データ バインドリスト項目のアクセス可能な名前を設定する手法を使用することが必要になる場合があります。 詳細については、 XAML アクセシビリティ サンプルの「シナリオ 4」を参照してください。

アクセシビリティ対応の名前とローカライズ

アクセス可能な名前がローカライズされた要素でもあることを確認するには、ローカライズ可能な文字列をリソースとして格納し、 x:Uid ディレクティブ 値を使用してリソース接続を参照するための適切な手法を使用する必要があります。 アクセス可能な名前が明示的に設定 AutomationProperties.Name 使用法から取得される場合は、その文字列もローカライズ可能であることを確認します。

AutomationProperties プロパティなどの添付プロパティでは、リソース名に特別な修飾構文が使用されるため、リソースは特定の要素に適用された添付プロパティを参照します。 たとえば、MediumButton という名前の UI 要素に適用されるAutomationProperties.Nameのリソース名は、MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Nameです。