基本的なアクセシビリティ情報は、多くの場合、名前、ロール、値に分類されます。 このトピックでは、支援テクノロジに必要な基本情報をアプリで公開するのに役立つコードについて説明します。
アクセス可能な名前
アクセシビリティ対応の名前は、スクリーン リーダーが UI 要素の読み上げに使用する短い説明テキスト文字列です。 UI 要素のアクセス可能な名前を設定して、コンテンツを理解したり UI を操作したりするために重要な意味を持ちます。 このような要素には、通常、画像、入力フィールド、ボタン、コントロール、領域が含まれます。
次の表では、XAML UI のさまざまな種類の要素に対してアクセス可能な名前を定義または取得する方法について説明します。
要素タイプ | 説明 |
---|---|
静的テキスト | TextBlock 要素および RichTextBlock 要素の場合、アクセス可能な名前は、表示される(内部)テキストから自動的に決定されます。 その要素内のすべてのテキストが名前として使用されます。 内部テキストの名前を参照してください。 |
画像 | XAML |
フォーム要素 | フォーム要素のアクセス可能な名前は、その要素に表示されるラベルと同じである必要があります。 「ラベルと LabeledBy」を参照してください。 |
ボタンとリンク | 既定では、ボタンまたはリンクのアクセス可能な名前は、内部テキストからの名前で説明されているのと同じ規則を使用して、表示されている テキストに基づいています。 ボタンに画像のみが含まれている場合は、 AutomationProperties.Name を使用して、ボタンの意図したアクションと同等のテキストのみを提供します。 |
パネルなどほとんどのコンテナー要素は、そのコンテンツをアクセス可能な名前として昇格しません。 これは、名前と対応するロールを報告すべきなのは、コンテナーではなくアイテムの内容だからです。 コンテナー要素は、場合によっては、支援技術のロジックが走査できるように、Microsoft UI オートメーションにおいて子要素を持つ要素であると認識されることがあります。 ただし、支援テクノロジのユーザーは、通常、コンテナーについて知る必要はないため、ほとんどのコンテナーには名前が付けられません。
役割と価値
XAML ボキャブラリの一部であるコントロールとその他の UI 要素は、定義の一部としてロールと値をレポートするための UI オートメーション のサポートを実装します。 UI オートメーション ツールを使用してコントロールのロールと値の情報を調べたり、各コントロールの AutomationPeer 実装のドキュメントを読んだりすることができます。 UI オートメーション フレームワークで使用可能なロールは、 AutomationControlType 列挙体で定義されます。 支援テクノロジなどの UI オートメーション クライアントは、コントロールの AutomationPeer を使用して UI オートメーション フレームワークが公開するメソッドを呼び出すことによって、ロール情報を取得できます。
すべてのコントロールに値があるわけではありません。 値を持つコントロールは、そのコントロールでサポートされているピアとパターンを通じて、この情報を UI オートメーションに報告します。 たとえば、 TextBox フォーム要素には値があります。 支援技術は UI オートメーション クライアントであり、値が存在することと値が何であるかの両方を検出できます。 この特定のケースでは、TextBox は TextBoxAutomationPeer 定義を介して IValueProvider パターンをサポートします。
注
AutomationProperties.Name またはその他の手法を使用してアクセス可能な名前を明示的に指定する場合は、アクセス可能な名前にコントロール ロールまたは型情報で使用されるのと同じテキストを含めないでください。 たとえば、名前に "button" や "list" などの文字列を含めないでください。 ロールと型の情報は、UI オートメーションの既定のコントロール サポートによって提供される別の UI オートメーション プロパティ (LocalizedControlType) から取得されます。 多くの支援テクノロジでは、アクセシビリティ対応の名前に LocalizedControlType が追加されるため、アクセス可能な名前にロールを複製すると、不必要に繰り返される単語が発生する可能性があります。 たとえば、Button に "button" というアクセス可能な名前を付けたり、名前の最後に "button" を含めたりすると、スクリーン リーダーによって "ボタン ボタン" として読み上げられる可能性があります。 ナレーターを使用して、アクセシビリティ情報のこの側面をテストする必要があります。
UI オートメーション ツリー ビューに影響を与える
UI オートメーション フレームワークにはツリー ビューの概念があり、UI オートメーション クライアントは、生、コントロール、コンテンツの 3 つのビューを使用して UI 内の要素間のリレーションシップを取得できます。 コントロール ビューは、UI オートメーション クライアントで頻繁に使用されるビューです。これは、対話型の UI 内の要素を適切に表現および編成できるためです。 通常、テスト ツールを使用すると、ツールが要素の編成を示すときに使用するツリー ビューを選択できます。
既定では、 UI オートメーション フレームワークが Windows アプリの UI を表す場合、コントロール派生クラスとその他のいくつかの要素がコントロール ビューに表示されます。 ただし、UI の構成により、コントロール ビューに要素を表示したくない場合があります。この要素は、情報を複製したり、アクセシビリティ シナリオにとって重要ではない情報を提示したりします。 添付プロパティ AutomationProperties.AccessibilityView を使用して、ツリー ビューに要素を公開する方法を変更します。 Raw ツリーに要素を配置した場合、ほとんどの支援テクノロジでは、その要素がビューの一部として報告されません。 既存のコントロールでこの動作の例をいくつか確認するには、テキスト エディターで generic.xaml デザイン参照 XAML ファイルを開き、テンプレートで AutomationProperties.AccessibilityView を検索します。
内部テキストからの名前
表示されている UI に既に存在する文字列をアクセシビリティ対応の名前の値に使用しやすくするために、コントロールやその他の UI 要素の多くは、要素内の内部テキストまたはコンテンツ プロパティの文字列値に基づいて、既定のアクセス可能な名前を自動的に決定するためのサポートを提供します。
- TextBlock、RichTextBlock、TextBox、および RichTextBlockは、それぞれTextプロパティの値を既定のアクセス可能な名前として昇格させます。
- ContentControl サブクラス
は、反復的な "ToString" 手法を使用して、 値内の文字列を検索し、これらの文字列を既定のアクセス可能な名前として昇格させます。Content
注
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>
ラベルとラベル付けしたもの
フォーム要素にラベルを関連付ける最適な方法は、まずラベルテキスト用の 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 では、データ バインディングと呼ばれる機能を通じて、関連付けられたデータ ソースから取得された値を表示するために使用できる多くのコントロールがサポートされています。 リストにデータ項目を設定する場合は、最初のリストが設定された後で、データ バインドリスト項目のアクセス可能な名前を設定する手法を使用することが必要になる場合があります。 詳細については、 XAML アクセシビリティ サンプルの「シナリオ 4」を参照してください。
アクセシビリティ対応の名前とローカライズ
アクセス可能な名前がローカライズされた要素でもあることを確認するには、ローカライズ可能な文字列をリソースとして格納し、 x:Uid ディレクティブ 値を使用してリソース接続を参照するための適切な手法を使用する必要があります。 アクセス可能な名前が明示的に設定 AutomationProperties.Name 使用法から取得されている場合は、文字列もローカライズ可能であることを確認します。
AutomationProperties プロパティなどの添付プロパティでは、リソース名に特別な修飾構文が使用されるため、リソースは特定の要素に適用された添付プロパティを参照します。 たとえば、MediumButton
という名前の UI 要素に適用される AutomationProperties.Name のリソース名は、MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name
です。
関連トピック
Windows developer