다음을 통해 공유


기본적인 접근성 정보 표시

기본 접근성 정보는 종종 이름, 역할 및 값으로 분류됩니다. 이 항목에서는 보조 기술에 필요한 기본 정보를 앱에 노출하는 데 도움이 되는 코드에 대해 설명합니다.

접근성 있는 이름

접근성 있는 이름은 화면 읽기 프로그램에서 UI 요소를 알리는 데 사용하는 짧고 설명이 포함된 텍스트 문자열입니다. 콘텐츠를 이해하거나 UI와 상호 작용하는 데 중요한 의미를 갖도록 UI 요소의 접근성 있는 이름을 설정합니다. 이러한 요소에는 일반적으로 이미지, 입력 필드, 단추, 컨트롤 및 영역이 포함됩니다.

이 표에서는 XAML UI에서 다양한 유형의 요소에 대해 액세스 가능한 이름을 정의하거나 가져오는 방법을 설명합니다.

요소 타입 설명
정적 텍스트 TextBlockRichTextBlock 요소의 경우 표시되는(내부) 텍스트에서 액세스 가능한 이름이 자동으로 결정됩니다. 해당 요소의 모든 텍스트가 이름으로 사용됩니다. 내부 텍스트에서 이름을 참조하세요.
이미지 XAML 이미지 요소에는 img 및 유사한 요소의 HTML Alt 특성과 직접적인 아날로그가 없습니다. AutomationProperties.Name를 사용하여 이름을 지정하거나, 캡션 기술을 사용합니다. 이미지에 대한 접근성 있는 이름은을 참조하세요.
양식 요소 양식 요소에 액세스할 수 있는 이름은 해당 요소에 대해 표시되는 레이블과 동일해야 합니다. 레이블 및 LabeledBy을 참조하세요.
단추 및 링크 기본적으로 단추 또는 링크의 액세스 가능한 이름은 내부 텍스트의 이름에 설명된 것과 동일한 규칙을 사용하여 표시되는 텍스트를 기반으로 합니다. 해당 버튼에 이미지만 포함된 경우 AutomationProperties.Name을 사용해서 버튼의 의도한 작업에 해당하는 텍스트를 제공합니다.

패널과 같은 대부분의 컨테이너 요소는 해당 콘텐츠를 접근성 있는 이름으로 승격하지 않습니다. 이는 컨테이너가 아니라 이름과 해당 역할을 보고해야 하는 것이 바로 항목 콘텐츠이기 때문입니다. 컨테이너 요소는 Microsoft UI 자동화 표현에서 자식 요소를 포함하는 요소라고 보고할 수 있으며, 이는 보조 기술 논리가 이를 탐색할 수 있도록 합니다. 그러나 보조 기술의 사용자는 일반적으로 컨테이너에 대해 알 필요가 없으므로 대부분의 컨테이너는 이름이 지정되지 않습니다.

역할 및 가치

XAML 어휘의 일부인 컨트롤 및 기타 UI 요소는 정의의 일부로 역할 및 값을 보고하기 위한 UI 자동화 지원을 구현합니다. UI 자동화 도구를 사용하여 컨트롤의 역할 및 값 정보를 검사하거나 각 컨트롤의 AutomationPeer 구현에 대한 설명서를 읽을 수 있습니다. UI 자동화 프레임워크에서 사용 가능한 역할은 AutomationControlType 열거형에 정의됩니다. 보조 기술과 같은 UI 자동화 클라이언트는 컨트롤의 AutomationPeer를 사용하여 UI 자동화 프레임워크가 노출하는 메서드를 호출하여 역할 정보를 얻을 수 있습니다.

모든 컨트롤에 값이 있는 것은 아닙니다. 값이 있는 컨트롤은 해당 컨트롤에서 지원하는 피어 및 패턴을 통해 이 정보를 UI 자동화에 보고합니다. 예를 들어 TextBox 양식 요소에는 값이 있습니다. 보조 기술은 UI 자동화 클라이언트일 수 있으며 값이 존재하고 값이 무엇인지 모두 검색할 수 있습니다. 이 특정 경우, TextBoxTextBoxAutomationPeer 정의를 통해 IValueProvider 패턴을 지원합니다.

비고

AutomationProperties.Name 또는 기타 기술을 사용하여 액세스 가능한 이름을 명시적으로 제공하는 경우 컨트롤 역할 또는 형식 정보에 사용되는 것과 동일한 텍스트를 액세스 가능한 이름에 포함하지 마세요. 예를 들어 이름에 "button" 또는 "list"와 같은 문자열은 포함하지 않습니다. 역할 및 형식 정보는 UI 자동화에 대한 기본 컨트롤 지원에서 제공하는 다른 UI 자동화 속성(LocalizedControlType)에서 제공됩니다. 많은 보조 기술은 액세스 가능한 이름에 LocalizedControlType을 추가하기 때문에, 액세스 가능한 이름에서 역할을 복제하면 불필요하게 단어가 반복될 수 있습니다. 예를 들어 버튼 컨트롤에 접근 가능한 이름으로 "button"을 지정하거나 이름의 마지막 부분에 "button"이 포함되는 경우, 화면 읽기 프로그램에서는 "버튼 버튼"으로 읽힐 수 있습니다. 내레이터를 사용하여 접근성 정보의 이 측면을 테스트해야 합니다.

UI 자동화 트리 뷰에 영향을 미치기

UI 자동화 프레임워크에는 트리 뷰의 개념이 있습니다. 여기서 UI 자동화 클라이언트는 원시, 컨트롤 및 콘텐츠의 세 가지 가능한 보기를 사용하여 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>

레이블 및 LabeledBy

레이블을 양식 요소와 연결하는 선호되는 방법은, 레이블 텍스트를 위한 x:Name을 가진 TextBlock을 사용하고, 양식 요소에서 연결된 속성인 AutomationProperties.LabeledBy를 설정하여 해당 레이블링 TextBlock을 XAML 이름으로 참조하는 것입니다. 이 패턴을 사용하는 경우 보조 기술은 레이블 텍스트를 양식 필드의 접근성 있는 이름으로 사용할 수 있습니다. 다음은 이 기술을 보여 주는 예제입니다.

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 자동화 속성 값을 조정할 수 있습니다. 자세한 내용은 접근성 테스트를 참조하세요.

접근성 테스트에 사용할 수 있는 도구 중 하나는 AccScope입니다. AccScope 도구는 보조 기술이 앱을 자동화 트리로 보는 방법을 나타내는 UI의 시각적 표현을 볼 수 있기 때문에 특히 유용합니다. 특히 내레이터가 앱에서 텍스트를 가져오는 방법과 UI의 요소를 구성하는 방법에 대한 보기를 제공하는 내레이터 모드가 있습니다. AccScope는 예비 디자인 단계에서도 앱에 대한 개발 주기 전반에 걸쳐 사용되고 유용할 수 있도록 설계되었습니다. 자세한 내용은 AccScope를 참조하세요.

동적 데이터에서 액세스할 수 있는 이름

Windows는 데이터 바인딩이라고 불리는 기능을 통해 연결된 데이터 원본의 값을 표시하기 위해 사용할 수 있는 여러 컨트롤을 지원합니다. 목록을 데이터 항목으로 채우는 경우 초기 목록이 채워진 후 데이터 바인딩된 목록 항목에 액세스할 수 있는 이름을 설정하는 기술을 사용해야 할 수 있습니다. 자세한 내용은 XAML 접근성 샘플의 "시나리오 4"를 참조하세요.

액세스 가능한 이름 및 지역화

액세스 가능한 이름도 지역화된 요소인지 확인하려면 지역화 가능한 문자열을 리소스로 저장한 다음 x:Uid 지시문 값으로 리소스 연결을 참조하는 올바른 기술을 사용해야 합니다. 액세스 가능한 이름이 명시적으로 설정된 AutomationProperties.Name 사용에서 오는 경우 문자열도 지역화할 수 있는지 확인합니다.

AutomationProperties 속성과 같은 연결된 속성은 리소스 이름에 대해 특수 정규화된 구문을 사용하므로 리소스는 특정 요소에 적용된 연결된 속성을 참조합니다. 예를 들어, UI 요소 에 적용되는 리소스 이름인 MediumButton입니다.